home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / abreed3.lha / DEMO.s < prev    next >
Text File  |  1995-03-31  |  112KB  |  7,603 lines

  1.  
  2. maxscrdiv EQU 8
  3. max3ddiv EQU 5
  4. playerheight EQU 12*1024
  5. playercrouched EQU 6*1024
  6. scrheight EQU 80
  7.  
  8. ; k/j/m
  9. ; 4/8
  10. ; s/x
  11. ; b/n
  12.  
  13. xpos EQU 0    ;l
  14. zpos EQU 4    ;l
  15. zsinval EQU 8    ;w
  16. zcosval EQU 10    ;w
  17. ztox EQU 12    ;l
  18. xsinval EQU 16    ;w
  19. xcosval EQU 18    ;w
  20. xspd EQU 20    ;w
  21. zspd EQU 22    ;w
  22. mapx EQU 24    ;b
  23. mapz EQU 25    ;b
  24. whichtile EQU 26 ;b
  25. xofflight EQU 28    ;w
  26. zofflight EQU 30    ;w
  27. offlight EQU 32        ;w
  28. zlinestore EQU 34
  29. zlinedir EQU 38
  30. zposdir EQU 40
  31. zposstore EQU 42
  32. xdiststore EQU 44
  33. xdistdir EQU 46
  34. zwallfound EQU 48
  35.  
  36. xlinestore EQU 50
  37. xlinedir EQU 54
  38. xposdir EQU 56
  39. xposstore EQU 58
  40. zdiststore EQU 60
  41. zdistdir EQU 62
  42. xwallfound EQU 64
  43.  
  44.  
  45. midoffset EQU 104*4*40
  46.  
  47.  SECTION Scrn,CODE
  48. OpenLib         equ -552
  49. CloseLib        equ -414
  50.  
  51. vhposr        equ $006    
  52. vhposrl        equ $007 
  53. bltcon0        equ $40 
  54. bltcon1        equ $42
  55. bltcpt        equ $48
  56. bltbpt        equ $4c
  57. bltapt        equ $50
  58. spr0ctl        equ $142
  59. spr1ctl        equ $14a
  60. spr2ctl        equ $152
  61. spr3ctl        equ $15a
  62. spr4ctl        equ $162
  63. spr5ctl        equ $16a
  64. spr6ctl        equ $172
  65. spr7ctl        equ $17a
  66. spr0pos        equ $140
  67. spr1pos        equ $148
  68. spr2pos        equ $150
  69. spr3pos        equ $158
  70. spr4pos        equ $160
  71. spr5pos        equ $168
  72. spr6pos        equ $170
  73. spr7pos        equ $178
  74. bltdpt         equ $54
  75. bltafwm        equ $44
  76. bltalwm        equ $46
  77. bltsize         equ $58
  78. bltcmod         equ $60
  79. bltbmod         equ $62
  80. bltamod         equ $64
  81. bltdmod         equ $66
  82. diwstart        equ $8e         ; Screen hardware registers.
  83. diwstop         equ $90
  84. ddfstart        equ $92
  85. ddfstop         equ $94
  86. bplcon0         equ $100
  87. bplcon1         equ $102
  88. col0            equ $180
  89. col1            equ $182
  90. col2        equ $184
  91. col3        equ $186
  92. col4        equ $188
  93. col5        equ $18a
  94. col6        equ $18c
  95. col7        equ $18e
  96. col8            equ $190
  97. col9            equ $192
  98. col10           equ $194
  99. dmacon        equ $96
  100. dmaconr        equ $002
  101. intenar        equ $01c
  102. intena        equ $09a
  103. intreq        equ $09c
  104. intreqr        equ $01e
  105. intreqrl    equ $01f
  106. bpl1pth         equ $e0
  107. bpl1ptl         equ $e2
  108. bpl2pth        equ $e4
  109. bpl2ptl        equ $e6
  110. bpl3pth        equ $e8
  111. bpl3ptl        equ $ea
  112. bpl4pth        equ $ec
  113. bpl4ptl        equ $ee
  114. bpl5pth        equ $f0
  115. bpl5ptl        equ $f2
  116. bpl6pth        equ $f4
  117. bpl6ptl        equ $f6
  118. bpl7pth        equ $f8
  119. bpl7ptl        equ $fa
  120. bpl8pth        equ $fc
  121. bpl8ptl        equ $fe
  122. spr0pth        equ $120
  123. spr0ptl        equ $122
  124. spr1pth        equ $124
  125. spr1ptl        equ $126
  126. spr2pth        equ $128
  127. spr2ptl        equ $12a
  128. spr3pth        equ $12c
  129. spr3ptl        equ $12e
  130. spr4pth        equ $130
  131. spr4ptl        equ $132
  132. spr5pth        equ $134
  133. spr5ptl        equ $136
  134. spr6pth        equ $138
  135. spr6ptl        equ $13a
  136. spr7pth        equ $13c
  137. spr7ptl        equ $13e
  138.  
  139. ; move.l #length,d0
  140. ; moveq.l #2,d1    ; chipmem
  141. ; move.l 4.w,a6
  142. ; jsr allocmem(a6) = -198
  143.  
  144. ; tst.l d0
  145. ; beq.s ohbugger
  146. ; move.l d0,memaddr
  147.  
  148.  
  149. ; move.l 4.w,a6
  150. ; move.l memaddr,a1
  151. ; move.l #size,d0
  152. ; jsr freemem(a6) =-210
  153.  
  154.  
  155. ** This waits for the blitter to finish before allowing program
  156. ** execution to continue.
  157.  
  158. WB MACRO
  159. \@bf:
  160.  btst #6,dmaconr(a6)
  161.  bne.s \@bf
  162.  ENDM
  163.  
  164. *Another version for when d6 <> dff000
  165.  
  166. WBSLOW MACRO
  167. \@bf:
  168.  btst #6,$dff000+dmaconr
  169.  bne.s \@bf
  170.  ENDM
  171.  
  172. WT MACRO
  173. \@bf:
  174.  btst #6,(a3)
  175.  bne.s \@bd
  176.  rts
  177. \@bd: 
  178.  btst #4,(a0)
  179.  beq.s \@bf
  180.  ENDM
  181.  
  182. WTNOT MACRO
  183. \@bf:
  184.  btst #6,(a3)
  185.  bne.s \@bd
  186.  rts
  187. \@bd: 
  188.  btst #4,(a0)
  189.  bne.s \@bf
  190.  ENDM
  191.  
  192. **
  193.  
  194.  include "macros.i"
  195.  include "ab3:source/defs.i"
  196.  
  197. * Load level into buffers.
  198.  move.l 4.w,a6
  199.  move.l #doslibname,a1
  200.  moveq #0,d0
  201.  jsr -552(a6)
  202.  move.l d0,doslib
  203.  
  204. ; bra noload
  205.  
  206.  move.l d0,a6
  207.  move.l #LDname,d1
  208.  move.l #1005,d2
  209.  jsr -30(a6)
  210.  move.l d0,LDhandle
  211.  
  212.  move.l doslib,a6
  213.  move.l d0,d1
  214.  move.l #LEVELDATA,d2
  215.  move.l #70000,d3
  216.  jsr -42(a6)
  217.  
  218.  move.l doslib,a6
  219.  move.l LDhandle,d1
  220.  jsr -36(a6)
  221.  
  222. ********
  223.  
  224.  move.l doslib,a6
  225.  move.l #LGname,d1
  226.  move.l #1005,d2
  227.  jsr -30(a6)
  228.  move.l d0,LGhandle
  229.  
  230.  move.l doslib,a6
  231.  move.l d0,d1
  232.  move.l #LEVELGRAPHICS,d2
  233.  move.l #30000,d3
  234.  jsr -42(a6)
  235.  
  236.  move.l doslib,a6
  237.  move.l LGhandle,d1
  238.  jsr -36(a6)
  239.  
  240. ********
  241.  
  242.  move.l doslib,a6
  243.  move.l #LCname,d1
  244.  move.l #1005,d2
  245.  jsr -30(a6)
  246.  move.l d0,LChandle
  247.  
  248.  move.l doslib,a6
  249.  move.l d0,d1
  250.  move.l #LEVELCLIPS,d2
  251.  move.l #50000,d3
  252.  jsr -42(a6)
  253.  
  254.  move.l doslib,a6
  255.  move.l LChandle,d1
  256.  jsr -36(a6)
  257.  
  258. *******
  259.  
  260. noload:
  261.  
  262. ********
  263.  
  264. ; move.l doslib,a6
  265. ; move.l #Prefsname,d1
  266. ; move.l #1005,d2
  267. ; jsr -30(a6)
  268. ; move.l d0,Prefshandle
  269.  
  270. ; move.l doslib,a6
  271. ; move.l d0,d1
  272. ; move.l #Prefsfile,d2
  273. ; move.l #50,d3
  274. ; jsr -42(a6)
  275.  
  276. ; move.l doslib,a6
  277. ; move.l Prefshandle,d1
  278. ; jsr -36(a6)
  279.  
  280. *******
  281.  
  282.  cmp.b #'s',Prefsfile+2
  283.  seq STEREO
  284.  
  285.  move.l doslib,d0
  286.  move.l d0,a1
  287.  move.l 4.w,a6
  288.  jsr CloseLib(a6)
  289.  
  290.  jmp stuff
  291. endstuff:
  292.  
  293.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  294.  move.w #$87c0,dmacon(a6)
  295.  move.w #$8020,dmacon(a6)
  296.  move.w intenar(a6),saveinters
  297.  move.w #$7fff,intena(a6)
  298.  move.w #$00ff,$dff09e
  299.  
  300. *** Put myself in supervisor mode
  301.  
  302.  move.l #blag,$80
  303.  trap #0
  304. ; move.l $6c,d0
  305. ; move.l #blag,$6c
  306. ; move.w #$8010,intreq(a6)
  307.  
  308.  rts
  309.  
  310. saveit: ds.l 10
  311. doslibname: dc.b 'dos.library',0
  312.  even
  313. doslib: dc.l 0
  314.  
  315. LDname: dc.b 'ab3:includes/tstlev.bin',0
  316.  even
  317. LDhandle: dc.l 0
  318. LGname: dc.b 'ab3:includes/tstlev.graph.bin',0
  319.  even
  320. LGhandle: dc.l 0
  321. LCname: dc.b 'ab3:includes/tstlev.clips',0
  322.  even
  323. LChandle: dc.l 0
  324.  
  325. Prefsname: dc.b 'ram:prefs',0
  326.  even
  327. Prefshandle: dc.l 0
  328.  
  329. Prefsfile:
  330.  dc.b 'k8nx'
  331.  ds.b 50
  332.  
  333.  even
  334.  
  335. blag:
  336. ; move.w #$10,intreq(a6)
  337. ; move.l d0,$6c
  338. ; move.w #$7fff,intena(a6)
  339.  
  340.  move.w #$20,$dff1dc
  341.  
  342.  move.l $6c,saveit
  343.  move.l #Chan0inter,$6c
  344.  jsr KInt_Init
  345.  
  346.  
  347.  
  348. ****************************
  349. * Initialize level
  350. ****************************
  351. * Poke all clip offsets into
  352. * correct bit of level data.
  353. ****************************
  354.  lea.l LEVELGRAPHICS,a0
  355.  move.l 12(a0),a1
  356.  add.l a0,a1
  357.  move.l a1,ZoneGraphAdds
  358.  move.l (a0),a1
  359.  add.l a0,a1
  360.  move.l a1,DoorData
  361.  move.l 4(a0),a1
  362.  add.l a0,a1
  363.  move.l a1,LiftData
  364.  move.l 8(a0),a1
  365.  add.l a0,a1
  366.  move.l a1,SwitchData
  367.  adda.w #16,a0
  368.  move.l a0,ZoneAdds
  369.  
  370.  lea.l LEVELDATA,a1
  371.  move.l 16(a1),a2
  372.  add.l a1,a2
  373.  move.l a2,Points
  374.  move.l 20(a1),a2
  375.  add.l a1,a2
  376.  move.l a2,FloorLines
  377.  move.l 24(a1),a2
  378.  add.l a1,a2
  379.  move.l a2,ObjectData
  380.  move.l 28(a1),a2
  381.  add.l a1,a2
  382.  move.l a2,PlayerShotData
  383.  move.l 32(a1),a2
  384.  add.l a1,a2
  385.  move.l a2,NastyShotData
  386.  move.l 36(a1),a2
  387.  add.l a1,a2
  388.  move.l a2,ObjectPoints  
  389.  move.l 40(a1),a2
  390.  add.l a1,a2
  391.  move.l a2,PLR1_Obj
  392.  move.l 44(a1),a2
  393.  add.l a1,a2
  394.  move.l a2,PLR2_Obj
  395.  move.w 14(a1),NumObjectPoints
  396.  
  397. ; bra noclips
  398.   
  399.  lea.l LEVELCLIPS,a2
  400.  moveq #0,d0
  401.  move.w 10(a1),d7    ;numzones
  402. assignclips:
  403.  move.l (a0)+,a3
  404.  add.l a1,a3    ; pointer to a zone
  405.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  406. dowholezone:
  407.  tst.w (a3)
  408.  blt.s nomorethiszone
  409.  tst.w 2(a3)
  410.  blt.s thisonenull
  411.  
  412.  move.l d0,d1
  413.  asr.l #1,d1
  414.  move.w d1,2(a3)
  415.  
  416. findnextclip:
  417.  cmp.w #-2,(a2,d0.l)
  418.  beq.s foundnextclip
  419.  addq.l #2,d0
  420.  bra.s findnextclip
  421. foundnextclip
  422.  addq.l #2,d0
  423.  
  424. thisonenull:
  425.  addq #8,a3 
  426.  bra.s dowholezone
  427. nomorethiszone:
  428.  dbra d7,assignclips
  429.  
  430.  lea (a2,d0.l),a2
  431.  move.l a2,CONNECT_TABLE
  432.  
  433. noclips:
  434.  
  435. * Put in addresses of glowything
  436.  
  437.  move.l red_des,a0
  438.  move.w (a0),d0
  439.  addq #1,d0
  440.  muls #6,d0
  441.  lea 2(a0,d0.w),a1
  442.  move.l red_des+4,a0
  443.  move.l a1,(a0)
  444.  move.w #0,(a1)
  445.  
  446.  move.l yellow_des,a0
  447.  move.w (a0),d0
  448.  addq #1,d0
  449.  muls #6,d0
  450.  lea 2(a0,d0.w),a1
  451.  move.l yellow_des+4,a0
  452.  move.l a1,(a0)
  453.  move.w #0,(a1)
  454.  
  455.  move.l green_des,a0
  456.  move.w (a0),d0
  457.  addq #1,d0
  458.  muls #6,d0
  459.  lea 2(a0,d0.w),a1
  460.  move.l green_des+4,a0
  461.  move.l a1,(a0)
  462.  move.w #0,(a1)
  463.  
  464.  move.l blue_des,a0
  465.  move.w (a0),d0
  466.  addq #1,d0
  467.  muls #6,d0
  468.  lea 2(a0,d0.w),a1
  469. ; move.l #protinit-750000,a6
  470.  move.l blue_des+4,a0
  471.  move.l a1,(a0)
  472.  move.w #0,(a1)
  473.  
  474.  
  475. ************************************
  476.  
  477.  cmp.b #'k',Prefsfile
  478.  bne.s nkb
  479.  st PLR1KEYS
  480.  clr.b PLR1PATH
  481.  clr.b PLR1MOUSE
  482.  clr.b PLR1JOY
  483. nkb:
  484.  cmp.b #'m',Prefsfile
  485.  bne.s nmc
  486.  clr.b PLR1KEYS
  487.  clr.b PLR1PATH
  488.  st PLR1MOUSE
  489.  clr.b PLR1JOY
  490. nmc:
  491.  cmp.b #'j',Prefsfile
  492.  bne.s njc
  493.  clr.b PLR1KEYS
  494.  clr.b PLR1PATH
  495.  clr.b PLR1MOUSE
  496.  st PLR1JOY
  497. njc:
  498.  
  499.  clr.b PLR1_StoodInTop
  500.  move.l #playerheight,PLR1s_height
  501.  
  502.  move.l #empty,pos1LEFT
  503.  move.l #empty,pos2LEFT
  504.  move.l #empty,pos1RIGHT
  505.  move.l #empty,pos2RIGHT
  506.  move.l #emptyend,Samp0endLEFT
  507.  move.l #emptyend,Samp1endLEFT
  508.  move.l #emptyend,Samp0endRIGHT
  509.  move.l #emptyend,Samp1endRIGHT
  510.  
  511.  move.l #nullspr,d0
  512.  move.w d0,s4l
  513.  move.w d0,s5l
  514.  move.w d0,s6l
  515.  move.w d0,s7l
  516.  swap d0
  517.  move.w d0,s4h
  518.  move.w d0,s5h
  519.  move.w d0,s6h
  520.  move.w d0,s7h 
  521.  
  522.  move.l #nullline,d0
  523.  move.w d0,n1l
  524.  swap d0
  525.  move.w d0,n1h
  526.  
  527.  move.l #Panel,d0
  528.  move.w d0,p1l
  529.  swap d0
  530.  move.w d0,p1h
  531.  move.l #Panel+40,d0
  532.  move.w d0,p2l
  533.  swap d0
  534.  move.w d0,p2h
  535.  move.l #Panel+40*2,d0
  536.  move.w d0,p3l
  537.  swap d0
  538.  move.w d0,p3h
  539.  move.l #Panel+40*3,d0
  540.  move.w d0,p4l
  541.  swap d0
  542.  move.w d0,p4h
  543.  move.l #Panel+40*4,d0
  544.  move.w d0,p5l
  545.  swap d0
  546.  move.w d0,p5h
  547.  move.l #Panel+40*5,d0
  548.  move.w d0,p6l
  549.  swap d0
  550.  move.w d0,p6h
  551.  move.l #Panel+40*6,d0
  552.  move.w d0,p7l
  553.  swap d0
  554.  move.w d0,p7h
  555.  move.l #Panel+40*7,d0
  556.  move.w d0,p8l
  557.  swap d0
  558.  move.w d0,p8h
  559.  
  560. *******************************
  561. * TIMER SCREEN SETUP
  562. ; move.l #TimerScr,d0
  563. ; move.w d0,p1l
  564. ; swap d0
  565. ; move.w d0,p1h
  566. ; move.w #$1201,Panelcon
  567.  
  568.  move.l #borders,d0
  569.  move.w d0,s0l
  570.  swap d0
  571.  move.w d0,s0h
  572.  move.l #borders+2592,d0
  573.  move.w d0,s1l
  574.  swap d0
  575.  move.w d0,s1h
  576.  move.l #borders+2592*2,d0
  577.  move.w d0,s2l
  578.  swap d0
  579.  move.w d0,s2h
  580.  move.l #borders+2592*3,d0
  581.  move.w d0,s3l
  582.  swap d0
  583.  move.w d0,s3h
  584.  
  585.  move.w #52*256+64,borders
  586.  move.w #212*256+0,borders+8
  587.  move.w #52*256+64,borders+2592
  588.  move.w #212*256+128,borders+8+2592
  589.  move.w #52*256+192,borders+2592*2
  590.  move.w #212*256+0,borders+8+2592*2
  591.  move.w #52*256+192,borders+2592*3
  592.  move.w #212*256+128,borders+8+2592*3
  593.  
  594.  move.l #FacePlace,d0
  595.  move.w d0,f1l
  596.  swap d0
  597.  move.w d0,f1h
  598.  move.l #FacePlace+32*24,d0
  599.  move.w d0,f2l
  600.  swap d0
  601.  move.w d0,f2h
  602.  move.l #FacePlace+32*24*2,d0
  603.  move.w d0,f3l
  604.  swap d0
  605.  move.w d0,f3h
  606.  move.l #FacePlace+32*24*3,d0
  607.  move.w d0,f4l
  608.  swap d0
  609.  move.w d0,f4h
  610.  move.l #FacePlace+32*24*4,d0
  611.  move.w d0,f5l
  612.  swap d0
  613.  move.w d0,f5h
  614.  
  615.  move.l #PanelCop,d0
  616.  move.w d0,pcl1
  617.  move.w d0,pcl2
  618.  swap d0
  619.  move.w d0,pch1
  620.  move.w d0,pch2
  621.  
  622.  move.l #bigfield,d0
  623.  move.w d0,ocl
  624.  swap d0
  625.  move.w d0,och
  626.  
  627.  bset.b #1,$bfe001
  628.  
  629.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  630.  move.w #$00ff,$dff09e
  631.  
  632. ; move.l #Blurbfield,$dff080
  633.  
  634.  move.w #0,d0
  635.  
  636.  move.l #scrn,d0
  637.  move.w d0,pl1l
  638.  swap d0
  639.  move.w d0,pl1h
  640.  
  641.  move.l #scrn+40,d0
  642.  move.w d0,pl2l
  643.  swap d0
  644.  move.w d0,pl2h
  645.  
  646.  move.l #scrn+80,d0
  647.  move.w d0,pl3l
  648.  swap d0
  649.  move.w d0,pl3h
  650.  
  651.  move.l #scrn+120,d0
  652.  move.w d0,pl4l
  653.  swap d0
  654.  move.w d0,pl4h
  655.  
  656.  move.l #scrn+160,d0
  657.  move.w d0,pl5l
  658.  swap d0
  659.  move.w d0,pl5h
  660.  
  661.  move.l #scrn+200,d0
  662.  move.w d0,pl6l
  663.  swap d0
  664.  move.w d0,pl6h
  665.  
  666.  move.l #scrn+240,d0
  667.  move.w d0,pl7l
  668.  swap d0
  669.  move.w d0,pl7h
  670.  
  671.  move.l #healthpal,a5
  672.  move.l #colbars,a0
  673.  move.l #colbars2,a2
  674.  move.w #scrheight-1,d0
  675.  move.l #0,d6
  676.  move.w #0,d3
  677.  move.w #$2bdf,startwait
  678.  move.w #$2d01,endwait
  679. fillcop
  680.  move.w #$180,d1
  681.  
  682.  move.l a0,a1
  683.  move.l a2,a3
  684.  move.w #$10c,(a1)+
  685.  move.w #$10c,(a3)+
  686.  move.w d3,(a1)+
  687.  move.w d3,(a3)+
  688.  eor.w #$8000,d3
  689.  
  690.  move.w #$106,(a1)+
  691.  move.w #$106,(a3)+
  692.  move.w #$2c42,d5
  693.  or.w d3,d5
  694.  and.w #$fffe,d5
  695.  move.w d5,(a1)+
  696.  move.w d5,(a3)+
  697.  bsr do32
  698.  
  699.  move.w #$106,(a1)+
  700.  move.w #$106,(a3)+
  701.  move.w #$4c42,d5
  702.  or.w d3,d5
  703.  and.w #$fffe,d5
  704.  move.w d5,(a1)+
  705.  move.w d5,(a3)+
  706.  bsr do32
  707.  
  708.  move.w #$106,(a1)+
  709.  move.w #$106,(a3)+
  710.  move.w #$6c42,d5
  711.  or.w d3,d5
  712.  and.w #$fffe,d5
  713.  move.w d5,(a1)+
  714.  move.w d5,(a3)+
  715.  bsr do32
  716.  
  717. **********************************
  718.  
  719.  cmp.b #'s',option
  720.  bra.s smallscrn
  721.  
  722.  move.w startwait,(a1)+
  723.  move.w #$fffe,(a1)+
  724.  move.w endwait,(a1)+
  725.  move.w #$ff00,(a1)+
  726.  move.w startwait,(a3)+
  727.  move.w #$fffe,(a3)+
  728.  move.w endwait,(a3)+
  729.  move.w #$ff00,(a3)+
  730.  
  731.  
  732.  add.w #$300,startwait
  733.  add.w #$300,endwait
  734.  
  735. smallscrn: 
  736.  
  737.  move.l #$1060c42,(a1)+
  738.  move.l #$1060c42,(a3)+
  739.  move.w #$19e,(a1)+
  740.  move.w (a5),(a1)+
  741.  move.w #$19e,(a3)+
  742.  move.w (a5)+,(a3)+
  743.  
  744. **********************************
  745.  
  746.  adda.w #104*4,a0
  747.  adda.w #104*4,a2
  748.  
  749.  dbra d0,fillcop
  750.  
  751. **********************************
  752.  cmp.b #'s',option
  753.  bra smallnotlarge
  754.  move.w #$38,fetchstart
  755.  move.w #$b8,fetchstop
  756.  move.w #$2c81,winstart
  757.  move.w #$2cc1,winstop
  758.  move.w #-40,modulo
  759.  move.w #-40,modulo+4
  760.  
  761.  move.l #scrn+40,a0
  762.  move.l #scrn+160,a1
  763.  move.l #scrn+280,a2
  764.  move.l #scrntab,a3
  765.  move.w #319,d7    ; counter
  766.  move.w #0,d1    ; xpos
  767. plotscrnloop:
  768.  move.b (a3)+,d0
  769.  move.w d1,d2
  770.  asr.w #3,d2
  771.  move.b d1,d3
  772.  not.b d3
  773.  bclr.b d3,-40(a0,d2.w)
  774.  bclr.b d3,(a0,d2.w)
  775.  bclr.b d3,40(a0,d2.w)
  776.  bclr.b d3,-40(a1,d2.w)
  777.  bclr.b d3,(a1,d2.w)
  778.  bclr.b d3,40(a1,d2.w)
  779.  bclr.b d3,-40(a2,d2.w)
  780.  btst #0,d0
  781.  beq.s nobp1
  782.  bset.b d3,-40(a0,d2.w)
  783. nobp1:
  784.  btst #1,d0
  785.  beq.s nobp2
  786.  bset.b d3,(a0,d2.w)
  787. nobp2:
  788.  btst #2,d0
  789.  beq.s nobp3
  790.  bset.b d3,40(a0,d2.w)
  791. nobp3:
  792.  btst #3,d0
  793.  beq.s nobp4
  794.  bset.b d3,-40(a1,d2.w)
  795. nobp4:
  796.  btst #4,d0
  797.  beq.s nobp5
  798.  bset.b d3,(a1,d2.w)
  799. nobp5:
  800.  btst #5,d0
  801.  beq.s nobp6
  802.  bset.b d3,40(a1,d2.w)
  803. nobp6:
  804.  btst #6,d0
  805.  beq.s nobp7
  806.  bset.b d3,-40(a2,d2.w)
  807. nobp7:
  808.  
  809.  addq #1,d1
  810.  
  811.  dbra d7,plotscrnloop
  812.  
  813. smallnotlarge:
  814.  
  815. **********************************
  816.  
  817. ****************************
  818.  jsr INITPLAYER
  819. ; bsr initobjpos
  820. ****************************
  821.  
  822.  
  823.  move.l #$dff000,a6
  824.  
  825.  move.l #null,$dff0a0
  826.  move.w #100,$dff0a4
  827.  move.w #443,$dff0a6
  828.  move.w #63,$dff0a8
  829.  
  830.  move.l #null2,$dff0b0
  831.  move.w #100,$dff0b4
  832.  move.w #443,$dff0b6
  833.  move.w #63,$dff0b8
  834.  
  835.  move.l #null4,$dff0c0
  836.  move.w #100,$dff0c4
  837.  move.w #443,$dff0c6
  838.  move.w #63,$dff0c8
  839.  
  840.  move.l #null3,$dff0d0
  841.  move.w #100,$dff0d4
  842.  move.w #443,$dff0d6
  843.  move.w #63,$dff0d8
  844.  
  845.  move.l #tab,a1
  846.  move.w #64,d7
  847.  move.w #0,d6
  848. outerlop
  849.  move.l #pretab,a0
  850.  move.w #255,d5
  851. scaledownlop:
  852.  move.b (a0)+,d0
  853.  ext.w d0
  854.  ext.l d0
  855.  muls d6,d0
  856.  asr.l #6,d0
  857.  move.b d0,(a1)+
  858.  dbra d5,scaledownlop
  859.  addq #1,d6
  860.  dbra d7,outerlop
  861.  
  862.  move.l #$dff000,a6
  863.  
  864.  move.w #$c018,intena(a6)
  865.  
  866.  move.w #$f,dmacon(a6)
  867.  move.w #$820f,dmacon(a6)
  868.  
  869. ; bsr protinit
  870.  
  871.  bsr FullEnergy
  872.  move.w #63,OldAmmo
  873.  move.w #0,Ammo
  874.  bsr AmmoBar
  875.  move.w #0,OldAmmo
  876.  
  877.  move.b #1,PLR1_GunDamage
  878.  move.b #1,PLR2_GunDamage
  879.  move.w #3,PLR1_GunNoise
  880.  move.w #3,PLR2_GunNoise
  881.  
  882.  move.w #10,GunData    ; 10 shots pistol
  883.  st GunData+7
  884.  clr.b GunData+16+7
  885.  clr.w GunData+16
  886.  move.b #0,GunSelected
  887.  
  888. ; move.w #$20,$1dc(a6)
  889.  
  890.  move.w #$0,$dff034
  891.  move.w #0,Conditions
  892.  move.l #KeyMap,a5
  893.  clr.b $45(a5)
  894.  
  895.  move.l #ingame,mt_data
  896.  clr.b UseAllChannels
  897.  
  898. ; cmp.b #'b',Prefsfile+3
  899. ; bne.s .noback
  900. ; jsr mt_init
  901. ;.noback:
  902. ;
  903. ; clr.b CHANNELDATA
  904. ; clr.b CHANNELDATA+8
  905. ; clr.b CHANNELDATA+16
  906. ; clr.b CHANNELDATA+24
  907. ;
  908. ; cmp.b #'b',Prefsfile+3
  909. ; bne.s noreserve
  910. ;
  911. ; st CHANNELDATA
  912. ; st CHANNELDATA+8
  913. ; st CHANNELDATA+16
  914. ; st CHANNELDATA+24
  915. ;noreserve: 
  916.  
  917.  st doanything
  918. ; st CHANNELDATA
  919. ; st CHANNELDATA+8
  920.  
  921.  move.l #bass,pos0LEFT
  922.  move.l #bassend,Samp0endLEFT
  923.  move.l #playerheight,PLR1s_targheight
  924.  move.l #playerheight,PLR1s_height
  925.  
  926.  move.b #%11011000,$bfd200
  927.  move.b #%00010000,$bfd000
  928. waitloop:
  929.  btst.b #4,$bfd000
  930.  bne.s waitloop
  931.  move.b #%11000000,$bfd200
  932.  
  933. lop: 
  934.  
  935.  
  936. ; bsr INITREC
  937. ; bsr RECEIVE
  938.  
  939. ; move.l BUFFER,PLR2_xoff
  940. ; move.l BUFFER+4,PLR2_zoff
  941. ; move.w BUFFER+10,PLR2_Obj+12
  942. ; move.l BUFFER+12,PLR2_yoff
  943.  
  944. ; move.w PLR2_Obj,d0
  945. ; move.l ObjectPoints,a1
  946. ; move.l PLR2_xoff,(a1,d0.w*8)
  947. ; move.l PLR2_zoff,4(a1,d0.w*8)
  948. ; move.l PLR2_yoff,d0
  949. ; asr.l #7,d0
  950. ; add.w #20,d0
  951. ; move.w d0,PLR2_Obj+4
  952. ; move.w #$2020,PLR2_Obj+6
  953. ; move.w #$2020,PLR2_Obj+14
  954. ; move.l #$00000000,PLR2_Obj+8
  955.  
  956.  
  957.  move.l #$dff000,a6
  958.  
  959.  move.w hitcol,d0
  960.  beq.s nofadedownhc
  961.  sub.w #$100,d0
  962.  move.w d0,hitcol
  963.  move.w d0,hitcol2
  964. nofadedownhc:
  965.  
  966.  move.l drawpt,d0
  967.  move.l olddrawpt,drawpt
  968.  move.l d0,olddrawpt
  969.  move.l d0,$dff084
  970.  move.l drawpt,a3
  971.  adda.w #10,a3
  972.  move.l a3,frompt
  973.  add.l #104*4*40,a3
  974.  move.l a3,midpt
  975.  
  976. waitfortop:
  977.  btst.b #0,intreqrl(a6)
  978.  beq waitfortop
  979.  move.w #$1,intreq(a6)
  980.  
  981.  move.b SpaceTapped,SPCTAP
  982.  clr.b SpaceTapped
  983.  
  984.  move.l waterpt,a0
  985.  move.l (a0)+,watertouse
  986.  cmp.l #endwaterlist,a0
  987.  blt.s okwat
  988.  move.l #waterlist,a0
  989. okwat:
  990.  move.l a0,waterpt
  991.  
  992.  add.w #640,wtan
  993.  and.w #8191,wtan
  994.  add.w #1,wateroff
  995.  and.w #63,wateroff
  996.  
  997.  move.w FramesToDraw,TempFrames
  998.  move.w #0,FramesToDraw
  999.  
  1000.  lea GunData,a6
  1001.  moveq #0,d0
  1002.  move.b GunSelected,d0
  1003.  add.w d0,d0
  1004.  lea (a6,d0.w*8),a6
  1005.  move.w (a6),Ammo
  1006.  
  1007.  JSR INITTIMER
  1008.  
  1009.  bsr PLR1_Control
  1010.  
  1011.  move.l #ZoneBrightTable,a1
  1012.  move.l ZoneAdds,a2
  1013.  move.l PLR1_ListOfGraphRooms,a0
  1014. doallz
  1015.  move.w (a0),d0
  1016.  blt.s doneallz
  1017.  add.w #8,a0
  1018.  
  1019.  move.l (a2,d0.w*4),a3
  1020.  add.l #LEVELDATA,a3
  1021.  move.w ToZoneBrightness(a3),d2
  1022.  
  1023.  blt.s justbright
  1024.  move.w d2,d3
  1025.  lsr.w #8,d3
  1026.  tst.b d3
  1027.  beq.s justbright
  1028.  
  1029.  move.l #BrightAnimTable,a4
  1030.  move.w -2(a4,d3.w*2),d2
  1031.  
  1032. justbright:
  1033.  move.w d2,(a1,d0.w*4)
  1034.  
  1035.  move.w ToUpperBrightness(a3),d2
  1036.  
  1037.  blt.s justbright2
  1038.  move.w d2,d3
  1039.  lsr.w #8,d3
  1040.  tst.b d3
  1041.  beq.s justbright2
  1042.  
  1043.  move.l #BrightAnimTable,a4
  1044.  move.w -2(a4,d3.w*2),d2
  1045.  
  1046. justbright2:
  1047.  move.w d2,2(a1,d0.w*4)
  1048.  
  1049.  bra doallz
  1050.  
  1051. doneallz:
  1052.  
  1053.  
  1054. ; bsr PLR2_Control
  1055.  
  1056. ******************************************
  1057.  jsr objmoveanim
  1058.  bsr EnergyBar
  1059.  bsr AmmoBar
  1060.  clr.b PLR1_clicked
  1061.  clr.b PLR2_clicked
  1062. ******************************************
  1063.  
  1064.  move.l ObjectPoints,a1
  1065.  move.l PLR1_Obj,a0
  1066.  move.b damagetaken(a0),d2
  1067.  beq notbeenshot
  1068.  move.w #$f00,hitcol
  1069.  move.w #$f00,hitcol2
  1070.  ext.w d2
  1071.  sub.w d2,Energy
  1072.  move.b #0,damagetaken(a0)
  1073.  move.l #Cheese,FacesPtr
  1074.  move.w #3,Cheese
  1075.  move.w #-1,FacesCounter
  1076.  
  1077.  movem.l d0-d7/a0-a6,-(a7)
  1078.  move.w #19,Samplenum
  1079.  clr.b notifplaying
  1080.  move.w #0,Noisex
  1081.  move.w #0,Noisez
  1082.  move.w #100,Noisevol
  1083.  jsr MakeSomeNoise
  1084.  
  1085.  movem.l (a7)+,d0-d7/a0-a6
  1086.  
  1087. notbeenshot:
  1088.  move.b Energy+1,numlives(a0)
  1089.  
  1090.  move.w (a0),d0
  1091.  move.l PLR1_xoff,(a1,d0.w*8)
  1092.  move.l PLR1_zoff,4(a1,d0.w*8)
  1093.  move.l PLR1_Roompt,a1
  1094.  
  1095.  move.w (a1),12(a0)
  1096.  move.w (a1),d2
  1097.  move.l #ZoneBrightTable,a1
  1098.  move.l (a1,d2.w*4),d2
  1099.  tst.b PLR1_StoodInTop
  1100.  bne.s .okinbott
  1101.  swap d2
  1102. .okinbott:
  1103.  
  1104.  move.w d2,2+128(a0)
  1105.  
  1106.  move.l PLR1_yoff,d0
  1107.  asr.l #7,d0
  1108.  move.w d0,4(a0)
  1109.  
  1110.  move.b PLR1_StoodInTop,ObjInTop+128(a0)
  1111.  
  1112.  move.w PLR1_sinval,d4
  1113.  muls #100,d4
  1114.  move.w PLR1_cosval,d5
  1115.  muls #100,d5
  1116.  
  1117.  move.b GunSelected,d0
  1118.  asl.b #2,d0
  1119.  add.b GunFrame,d0
  1120.  move.b d0,11+128(a0)
  1121.  
  1122.  tst.b GunFrame
  1123.  beq.s .noless
  1124.  subq.b #1,GunFrame
  1125. .noless: 
  1126.  
  1127.  move.l ObjectPoints,a1
  1128.  move.w 128(a0),d0
  1129.  move.w 12(a0),12+128(a0)
  1130.  move.l PLR1_xoff,d1
  1131.  add.l d4,d1
  1132.  move.l d1,(a1,d0.w*8)
  1133.  move.l PLR1_zoff,d1
  1134.  add.l d5,d1
  1135.  move.l d1,4(a1,d0.w*8)
  1136.  move.w 4(a0),d0
  1137.  add.w #16,d0
  1138.  move.w d0,4+128(a0)
  1139.  move.w #$2010,6+128(a0)
  1140.  
  1141.  move.l ObjectPoints,a1
  1142.  move.l PLR2_Obj,a0
  1143.  move.w (a0),d0
  1144.  move.l PLR2_xoff,(a1,d0.w*8)
  1145.  move.l PLR2_zoff,4(a1,d0.w*8)
  1146.  move.l PLR2_Roompt,a1
  1147. ************************
  1148.  move.w #-1,12(a0)
  1149.  move.w 10(a1),2(a0)
  1150. ************************
  1151.  move.l PLR2_yoff,d0
  1152.  add.l #playerheight+128*24,d0
  1153.  asr.l #7,d0
  1154.  move.w d0,4(a0)
  1155.  
  1156.  
  1157.  move.w #0,scaleval
  1158.  
  1159.  move.l PLR1_xoff,xoff
  1160.  move.l PLR1_yoff,yoff
  1161.  move.l PLR1_zoff,zoff
  1162.  move.w PLR1_angpos,angpos
  1163.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  1164.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  1165.  move.l PLR1_Roompt,Roompt
  1166.  
  1167.  move.w #0,leftclip
  1168.  move.w #96,rightclip
  1169.  move.w #0,deftopclip
  1170.  move.w #79,defbotclip
  1171.  move.w #0,topclip
  1172.  move.w #79,botclip
  1173. ; sub.l #10*104*4,frompt
  1174. ; sub.l #10*104*4,midpt
  1175.  
  1176. * Subroom loop
  1177.  
  1178.  bsr DrawDisplay
  1179.  
  1180.  bra noglass
  1181.  
  1182. ************************************
  1183. * Test glass routine:
  1184. ************************************
  1185.  
  1186.  move.l #WorkSpace,a0
  1187.  move.l frompt,a2
  1188.  move.w #104*4,d3
  1189.  move.w #1,d6
  1190. ribl
  1191.  move.w #31,d0
  1192. readinto
  1193.  move.w #15,d1
  1194.  move.l a2,a1
  1195. readintodown
  1196.  move.w (a1),(a0)+
  1197.  adda.w d3,a1
  1198.  move.w (a1),(a0)+
  1199.  adda.w d3,a1
  1200.  move.w (a1),(a0)+
  1201.  adda.w d3,a1
  1202.  move.w (a1),(a0)+
  1203.  adda.w d3,a1
  1204.  dbra d1,readintodown
  1205. ; add.w #256-128,a0
  1206.  addq #4,a2
  1207.  dbra d0,readinto
  1208.  addq #4,a2
  1209.  dbra d6,ribl
  1210.  
  1211. * We now have the screen in a buffer
  1212. * for squidging.
  1213.  
  1214.  move.l frompt,a2
  1215.  move.l #WorkSpace,a0
  1216.  move.l glassballpt,a3
  1217.  move.w #$fff,d7
  1218.  move.w #1,d6 
  1219. rfbl:
  1220.  move.w #31,d0
  1221. readoutfrom:
  1222.  move.w #15,d1
  1223.  move.l a2,a1
  1224.  moveq.w #0,d5
  1225. readoutfromdown:
  1226.  move.w (a3)+,d2
  1227.  beq.s nono1
  1228. ; add.w d5,d2
  1229.  move.w (a0,d2.w*2),d2
  1230.  and.w d7,d2
  1231.  move.w d2,(a1)
  1232. nono1:
  1233.  addq #1,d5
  1234.  add.w d3,a1
  1235.  move.w (a3)+,d2
  1236.  beq.s nono2
  1237. ; add.w d5,d2
  1238.  move.w (a0,d2.w*2),d2
  1239.  and.w d7,d2
  1240.  move.w d2,(a1)
  1241. nono2:
  1242.  addq #1,d5
  1243.  add.w d3,a1
  1244.  move.w (a3)+,d2
  1245.  beq.s nono3
  1246. ; add.w d5,d2
  1247.  move.w (a0,d2.w*2),d2
  1248.  and.w d7,d2
  1249.  move.w d2,(a1)
  1250. nono3:
  1251.  addq #1,d5
  1252.  add.w d3,a1
  1253.  move.w (a3)+,d2
  1254.  beq.s nono4
  1255. ; add.w d5,d2
  1256.  move.w (a0,d2.w*2),d2
  1257.  and.w d7,d2
  1258.  move.w d2,(a1)
  1259. nono4:
  1260.  addq #1,d5
  1261.  add.w d3,a1
  1262.  dbra d1,readoutfromdown
  1263.  addq #4,a2
  1264. ; adda.w #128,a0
  1265.  dbra d0,readoutfrom
  1266.  addq #4,a2
  1267.  dbra d6,rfbl
  1268.  
  1269.  move.l glassballpt,d0
  1270.  add.l #64*64*2,d0
  1271.  cmp.l #endglass,d0
  1272.  blt notoffglass
  1273.  move.l #glassball,d0
  1274. notoffglass
  1275.  move.l d0,glassballpt
  1276.  
  1277. noglass:
  1278.  
  1279.  tst.b PLR2
  1280.  bra.s nodrawp2
  1281.  
  1282.  
  1283.  move.l PLR2_xoff,xoff
  1284.  move.l PLR2_yoff,yoff
  1285.  move.l PLR2_zoff,zoff
  1286.  move.w PLR2_angpos,angpos
  1287.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  1288.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  1289.  
  1290.  move.w #0,leftclip
  1291.  move.w #96,rightclip
  1292.  move.w #10,deftopclip
  1293.  move.w #69,defbotclip
  1294.  add.l #68*104*4,frompt
  1295.  add.l #68*104*4,midpt
  1296.  
  1297.  bsr DrawDisplay
  1298.  
  1299.  
  1300. nodrawp2:
  1301.  
  1302. ; move.l #brightentab,a0
  1303. ; move.l frompt,a3
  1304. ; adda.w #(4*33)+(104*4*20),a3
  1305. ; move.w #20,d7
  1306. ; move.w #20,d6
  1307. ;horl:
  1308. ; move.w d6,d5
  1309. ; move.l a3,a1
  1310. ;vertl
  1311. ; move.w (a1),d0
  1312. ; move.w (a0,d0.w*2),(a1)
  1313. ; addq #4,a1
  1314. ; dbra d5,vertl
  1315. ; adda.w #104*4,a3
  1316. ; dbra d7,horl
  1317.  
  1318.  move.l #$dff000,a6
  1319.  
  1320. ; move.w #$300,col0(a6)
  1321.  
  1322.  move.l #KeyMap,a5
  1323.  tst.b $45(a5)
  1324.  beq.s noend
  1325.  
  1326.  bra endnomusic
  1327. noend:
  1328.  
  1329.  tst.w Energy
  1330.  bgt .noend
  1331.  cmp.b #'i',option+4
  1332.  bne end
  1333.  move.w #10,Energy
  1334. .noend:
  1335.  
  1336.  move.l SwitchData,a0
  1337.  tst.b 24+8(a0)
  1338.  bne end
  1339.   
  1340.  JSR STOPTIMER
  1341.  
  1342.  bra lop
  1343.  
  1344. ***************************************************************************
  1345. ***************************************************************************
  1346. ****************** End of Main Loop here ********************************** 
  1347. ***************************************************************************
  1348. ***************************************************************************
  1349. INITSEND:
  1350.  move.l #$bfd000,a0
  1351.  move.w #15,d7
  1352.  move.l #$bfe001,a3
  1353.  rts
  1354.  
  1355. SENDLONG:
  1356.  bset #6,(a0)
  1357.  WT
  1358.  move.w d7,d6
  1359. SENDLOOP:
  1360.  add.l d0,d0
  1361.  bcc.s SENDZERO
  1362.  bset #7,(a0)
  1363.  bra.s SEND1
  1364. SENDZERO:
  1365.  bclr #7,(a0)
  1366. SEND1:
  1367.  bclr #6,(a0)
  1368.  WTNOT
  1369.  
  1370.  add.l d0,d0
  1371.  bcc.s SENDZERO2
  1372.  bset #7,(a0)
  1373.  bra.s SEND12
  1374. SENDZERO2:
  1375.  bclr #7,(a0)
  1376. SEND12:
  1377.  
  1378.  bset #6,(a0)
  1379.  WT
  1380.  dbra d6,SENDLOOP
  1381.  
  1382.  bclr #7,(a0)
  1383.  bclr #6,(a0)
  1384. balls:
  1385.  btst #3,(a0)
  1386.  beq.s balls
  1387.  rts
  1388.  
  1389. SENDLAST:
  1390.  bset #6,(a0)
  1391.  WT
  1392.  move.w d7,d6
  1393. SENDLOOPLAST:
  1394.  add.l d0,d0
  1395.  bcc.s SENDZEROLAST
  1396.  bset #7,(a0)
  1397.  bra.s SEND1LAST
  1398. SENDZEROLAST:
  1399.  bclr #7,(a0)
  1400. SEND1LAST:
  1401.  bclr #6,(a0)
  1402.  WTNOT
  1403.  
  1404.  add.l d0,d0
  1405.  bcc.s SENDZERO2LAST
  1406.  bset #7,(a0)
  1407.  bra.s SEND12LAST
  1408. SENDZERO2LAST:
  1409.  bclr #7,(a0)
  1410. SEND12LAST:
  1411.  
  1412.  bset #6,(a0)
  1413.  WT
  1414.  dbra d6,SENDLOOPLAST
  1415.  
  1416.  bset #7,(a0)
  1417.  bclr #6,(a0)
  1418. ballsLAST:
  1419.  btst #3,(a0)
  1420.  beq.s ballsLAST
  1421.  rts
  1422.  
  1423.  
  1424. INITREC:
  1425.  move.l #$bfd000,a0
  1426.  move.l #BUFFER,a1
  1427.  move.w #15,d7
  1428.  move.l #$bfe001,a3
  1429.  rts
  1430.  
  1431. BACKRECEIVE
  1432.  bclr #6,(a0)
  1433.  bset #7,(a0)
  1434.  move.l d0,(a1)+
  1435.  
  1436. RECEIVE:
  1437.  
  1438.  WT
  1439.  bclr.b #7,(a0)
  1440.  move.w d7,d6
  1441. RECIEVELOOP:
  1442.  bset #6,(a0)
  1443.  WTNOT
  1444.  add.l d0,d0
  1445.  btst #3,(a0)
  1446.  beq.s noadd1
  1447.  addq #1,d0
  1448. noadd1:
  1449.  bclr #6,(a0)
  1450.  WT
  1451.  add.l d0,d0
  1452.  btst #3,(a0)
  1453.  beq.s noadd2
  1454.  addq #1,d0
  1455. noadd2:
  1456.  dbra d6,RECIEVELOOP
  1457.  bset #6,(a0)
  1458.  WTNOT
  1459.  btst #3,(a0)
  1460.  beq BACKRECEIVE
  1461.  bset #7,(a0)
  1462.  bclr #6,(a0)
  1463.  move.l d0,(a1)+
  1464.  rts
  1465.  
  1466. BUFFER: ds.l 2000
  1467.  
  1468. GunSelected: dc.b 0
  1469.  even
  1470.  
  1471. GunData:
  1472. ; 0=Pistol 1=Big Gun
  1473. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  1474. ; VISIBLE/INSTANT (0/FF)
  1475. ; damage,gotgun(b)
  1476. ; Delay (w)
  1477.  
  1478.  dc.w 0
  1479.  dc.b 1,3
  1480.  dc.b 20
  1481.  dc.b -1
  1482.  dc.b 1,$ff
  1483.  dc.w 5,0,0,0
  1484.  
  1485.  dc.w 0
  1486.  dc.b 1,1
  1487.  dc.b 40
  1488.  dc.b 0
  1489.  dc.b 4,0
  1490.  dc.w 10,0,0,0
  1491.  
  1492.  dc.w 0
  1493.  dc.b 1,9
  1494.  dc.b 5
  1495.  dc.b 0
  1496.  dc.b 10,0
  1497.  dc.w 50,0,0,0
  1498.  
  1499. protA: dc.w 0
  1500.  
  1501. Path:
  1502. ; incbin "testpath"
  1503. endpath:
  1504. pathpt: dc.l Path
  1505.  
  1506. PLR1KEYS: dc.b 0
  1507. PLR1PATH: dc.b 0
  1508. PLR1MOUSE: dc.b -1
  1509. PLR1JOY: dc.b 0
  1510.  
  1511.  even
  1512.  
  1513. Bobble: dc.w 0
  1514. xwobble: dc.l 0
  1515. xwobxoff: dc.w 0
  1516. xwobzoff: dc.w 0
  1517.  
  1518. PLR1_Control:
  1519.  
  1520. ; Take a snapshot of everything.
  1521.  
  1522.  move.l PLR1_xoff,d2
  1523.  move.l d2,PLR1_oldxoff
  1524.  move.l d2,oldx
  1525.  move.l PLR1_zoff,d3
  1526.  move.l d3,PLR1_oldzoff
  1527.  move.l d3,oldz
  1528.  move.l PLR1s_xoff,d0
  1529.  move.l d0,PLR1_xoff
  1530.  move.l d0,newx
  1531.  move.l PLR1s_zoff,d1
  1532.  move.l d1,newz
  1533.  move.l d1,PLR1_zoff
  1534.  
  1535.  move.l PLR1s_height,PLR1_height
  1536.  
  1537.  sub.l d2,d0
  1538.  sub.l d3,d1
  1539.  move.l d0,xdiff
  1540.  move.l d1,zdiff
  1541.  move.w PLR1s_sinval,PLR1_sinval
  1542.  move.w PLR1s_cosval,PLR1_cosval
  1543.  move.w PLR1s_angpos,PLR1_angpos
  1544.  move.l PLR1s_yoff,d0
  1545.  move.l #SineTable,a1
  1546.  move.w Bobble,d1
  1547.  move.w (a1,d1.w),d1
  1548.  move.w d1,d3
  1549.  ble.s notnegative
  1550.  neg.w d1
  1551. notnegative:
  1552.  add.w #16384,d1
  1553.  asr.w #5,d1
  1554.  move.w d1,d2
  1555.  add.w d1,d1
  1556.  add.w d2,d1
  1557.  ext.l d1
  1558.  add.l d1,d0
  1559.  
  1560.  asr.w #6,d3
  1561.  ext.l d3
  1562.  move.l d3,xwobble
  1563.  move.w PLR1_sinval,d1
  1564.  muls d3,d1
  1565.  move.w PLR1_cosval,d2
  1566.  muls d3,d2
  1567.  swap d1
  1568.  swap d2
  1569.  asr.w #7,d1
  1570.  move.w d1,xwobxoff
  1571.  asr.w #7,d2
  1572.  neg.w d2
  1573.  move.w d2,xwobzoff
  1574.  
  1575.  
  1576.  move.l d0,PLR1_yoff
  1577.  move.l d0,newy
  1578.  move.l d0,oldy
  1579.  move.l PLR1_height,thingheight
  1580.  move.l #40*256,StepUpVal
  1581.  move.l #$1000000,StepDownVal
  1582.  
  1583.  move.l PLR1_Roompt,objroom
  1584.  move.w #%100000000,wallflags
  1585.  move.b PLR1_StoodInTop,StoodInTop
  1586.  
  1587.  bsr MoveObject
  1588.  move.b StoodInTop,PLR1_StoodInTop
  1589.  move.w #0,wallflags
  1590.  move.l objroom,PLR1_Roompt
  1591.  move.w newx,PLR1_xoff
  1592.  move.w newz,PLR1_zoff
  1593.  move.l PLR1_xoff,PLR1s_xoff
  1594.  move.l PLR1_zoff,PLR1s_zoff
  1595.  
  1596.  move.l PLR1_Roompt,a0
  1597.  
  1598.  move.l ToZoneFloor(a0),d0
  1599.  tst.b PLR1_StoodInTop
  1600.  beq.s notintop
  1601.  move.l ToUpperFloor(a0),d0
  1602. notintop:
  1603.  
  1604.  move.l ToZoneRoof(a0),SplitHeight
  1605.  
  1606.  adda.w #ToZonePts,a0
  1607.  sub.l PLR1_height,d0
  1608.  move.l d0,PLR1s_tyoff
  1609.  
  1610. ; move.l (a0),a0        ; jump to viewpoint list
  1611.  * A0 is pointing at a pointer to list of points to rotate
  1612.  move.w (a0)+,d1
  1613.  ext.l d1
  1614.  add.l PLR1_Roompt,d1
  1615.  move.l d1,PLR1_PointsToRotatePtr
  1616.  tst.w (a0)+
  1617.  beq.s nobackgraphics
  1618.  move.l a0,-(a7)
  1619.  jsr putinbackdrop 
  1620.  move.l (a7)+,a0
  1621. nobackgraphics:
  1622.  move.l a0,PLR1_ListOfGraphRooms
  1623.  
  1624. *****************************************************
  1625.  
  1626.  rts
  1627.  
  1628. KeyMap: ds.b 256
  1629.  
  1630. PLR2_Control:
  1631.  move.l #SineTable,a0
  1632.  
  1633.  bsr turnleftright
  1634.  
  1635.  move.w PLR2_angspd,d1
  1636.  move.w PLR2_angpos,d0
  1637.  move.w (a0,d0.w),PLR2_sinval
  1638.  adda.w #2048,a0
  1639.  move.w (a0,d0.w),PLR2_cosval
  1640.  
  1641.  move.l PLR2_xspdval,d6
  1642.  move.l PLR2_zspdval,d7
  1643.  
  1644.  move.w PLR2_xoff,oldxoff
  1645.  move.w PLR2_zoff,oldzoff
  1646.  
  1647.  neg.l d6
  1648.  ble.s .nobug1
  1649.  asr.l #1,d6
  1650.  add.l #1,d6
  1651.  bra.s .bug1
  1652. .nobug1
  1653.  asr.l #1,d6
  1654. .bug1:
  1655.  
  1656. ; beq.s goinnowhere
  1657. ; blt.s goinfor
  1658. ; cmp.l #4*65536,d6
  1659. ; ble.s goinnowhere
  1660. ; move.l #4*65536,d6
  1661. ;goinfor:
  1662. ; cmp.l #-4*65536,d6
  1663. ; bge.s goinnowhere
  1664. ; move.l #-4*65536,d6
  1665. ;goinnowhere:
  1666.  
  1667.  neg.l d7
  1668.  ble.s .nobug2
  1669.  asr.l #1,d7
  1670.  add.l #1,d7
  1671.  bra.s .bug2
  1672. .nobug2
  1673.  asr.l #1,d7
  1674. .bug2: 
  1675.  
  1676. ; beq.s goinnowhere2
  1677. ; blt.s goinfor2
  1678. ; cmp.l #4*65536,d7
  1679. ; ble.s goinnowhere2
  1680. ; move.l #4*65536,d7
  1681. ;goinfor2:
  1682. ; cmp.l #-4*65536,d7
  1683. ; bge.s goinnowhere2
  1684. ; move.l #-4*65536,d7
  1685. ;goinnowhere2:
  1686.  
  1687.  move.w PLR2_sinval,d1
  1688.  move.w PLR2_cosval,d2
  1689.  move.w PLR2_ForwardSpd,d3
  1690.  
  1691.  muls d3,d2
  1692.  muls d3,d1
  1693.  
  1694.  sub.l d1,d6
  1695.  sub.l d2,d7
  1696.  add.l PLR2_pushx,d6
  1697.  add.l PLR2_pushz,d7 
  1698.  add.l d6,PLR2_xspdval
  1699.  add.l d7,PLR2_zspdval
  1700.  move.l PLR2_xspdval,d6
  1701.  move.l PLR2_zspdval,d7
  1702.  add.l d6,PLR2_xoff
  1703.  add.l d7,PLR2_zoff
  1704.  
  1705.  move.w PLR2_xoff,newx
  1706.  move.w PLR2_zoff,newz
  1707.  move.w oldxoff,oldx
  1708.  move.w oldzoff,oldz
  1709.  move.l PLR2_xspdval,xdiff
  1710.  move.l PLR2_zspdval,zdiff
  1711.  move.l PLR2_Roompt,objroom
  1712.  move.w #%100000000,wallflags
  1713.  bsr MoveObject
  1714.  move.w #0,wallflags
  1715.  move.l objroom,PLR2_Roompt
  1716.  move.w newx,PLR2_xoff
  1717.  move.w newz,PLR2_zoff
  1718.  
  1719.  move.l PLR2_xoff,d0
  1720.  move.l PLR2_zoff,d1
  1721.  sub.l oldxoff,d0
  1722.  sub.l oldzoff,d1
  1723.  move.l #0,PLR2_pushx
  1724.  move.l #0,PLR2_pushz
  1725.  move.l d0,PLR2_opushx
  1726.  move.l d1,PLR2_opushz
  1727.  
  1728.  move.l PLR2_Roompt,a0
  1729.  move.l 2(a0),d0
  1730.  sub.l #playerheight,d0
  1731.  move.l d0,PLR2_tyoff
  1732.  adda.w #22,a0
  1733.  
  1734. ; move.l (a0),a0        ; jump to viewpoint list
  1735.  * A0 is pointing at a pointer to list of points to rotate
  1736.  move.l (a0)+,PLR2_PointsToRotatePtr
  1737.  move.l a0,PLR2_ListOfGraphRooms
  1738.  
  1739. *****************************************************
  1740.  
  1741.  move.l PLR2_tyoff,d0
  1742.  move.l PLR2_yoff,d1
  1743.  move.l PLR2_yvel,d2
  1744.  add.l d2,d1
  1745.  add.l #1024,d2
  1746.  sub.l d1,d0
  1747.  bgt.s .shouldfall
  1748.  move.l #0,d2
  1749.  add.l d0,d1
  1750. .shouldfall:
  1751.  move.l d2,PLR2_yvel
  1752.  move.l d1,PLR2_yoff
  1753.  rts
  1754.  
  1755.  
  1756. DrawDisplay:
  1757.  
  1758.  move.l #SineTable,a0
  1759.  move.w angpos,d0
  1760.  move.w (a0,d0.w),d6
  1761.  adda.w #2048,a0
  1762.  move.w (a0,d0.w),d7
  1763.  move.w d6,sinval
  1764.  move.w d7,cosval
  1765.  
  1766.  move.l yoff,d0
  1767.  asr.l #8,d0
  1768.  move.w d0,d1
  1769.  and.w #63,d1
  1770.  move.w d1,wallyoff
  1771.  asl.w #2,d0
  1772.  move.w d0,flooryoff
  1773.  
  1774.  move.w xoff,d6
  1775.  move.w d6,d3
  1776.  asr.w #1,d3
  1777.  add.w d3,d6
  1778.  asr.w #1,d6
  1779.  move.w d6,xoff34
  1780.  
  1781.  move.w zoff,d6
  1782.  move.w d6,d3
  1783.  asr.w #1,d3
  1784.  add.w d3,d6
  1785.  asr.w #1,d6
  1786.  move.w d6,zoff34
  1787.  
  1788.  bsr RotateLevelPts
  1789.  bsr RotateObjectPts
  1790.  bsr OrderZones
  1791.  
  1792.  move.l ListOfGraphRooms,a0
  1793.  
  1794.  move.l endoflist,a0
  1795. subroomloop:
  1796.  move.w -(a0),d7
  1797.  blt jumpoutofrooms
  1798.  
  1799. ; bsr setlrclip
  1800. ; move.w leftclip,d0
  1801. ; cmp.w rightclip,d0
  1802. ; bge subroomloop
  1803.  move.l a0,-(a7)
  1804.  
  1805.  move.l ZoneAdds,a0
  1806.  move.l (a0,d7.w*4),a0
  1807.  add.l #LEVELDATA,a0
  1808.  move.l ToZoneRoof(a0),SplitHeight
  1809.  
  1810.  move.l ZoneGraphAdds,a0
  1811.  move.l 4(a0,d7.w*8),a2
  1812.  move.l (a0,d7.w*8),a0
  1813.  
  1814.  add.l #LEVELGRAPHICS,a0
  1815.  add.l #LEVELGRAPHICS,a2
  1816.  move.l a2,ThisRoomToDraw+4
  1817.  move.l a0,ThisRoomToDraw
  1818.  
  1819.  move.l ListOfGraphRooms,a1
  1820.  
  1821. finditit:
  1822.  tst.w (a1)
  1823.  blt nomoretodoatall
  1824.  cmp.w (a1),d7
  1825.  beq outoffind
  1826.  adda.w #8,a1
  1827.  bra finditit
  1828.  
  1829. outoffind:
  1830.  
  1831.  move.l a1,-(a7)
  1832.  
  1833.  move.w #0,leftclip
  1834.  move.w #96,rightclip
  1835.  moveq #0,d7
  1836.  move.w 2(a1),d7
  1837.  blt.s outofrcliplop
  1838.  move.l #LEVELCLIPS,a0
  1839.  lea (a0,d7.l*2),a0
  1840.  
  1841.  tst.w (a0)
  1842.  blt outoflcliplop
  1843.  
  1844.  bsr NEWsetlclip
  1845.  
  1846. intolcliplop:        ; clips
  1847.  tst.w (a0)
  1848.  blt outoflcliplop
  1849.  
  1850.  bsr NEWsetlclip 
  1851.  bra intolcliplop
  1852.  
  1853. outoflcliplop:
  1854.  
  1855.  addq #2,a0
  1856.  
  1857.  tst.w (a0)
  1858.  blt outofrcliplop
  1859.  
  1860.  bsr NEWsetrclip
  1861.  
  1862. intorcliplop:        ; clips
  1863.  tst.w (a0)
  1864.  blt outofrcliplop
  1865.  
  1866.  bsr NEWsetrclip 
  1867.  bra intorcliplop
  1868.  
  1869. outofrcliplop:
  1870.  
  1871.  move.w leftclip,d0
  1872.  cmp.w #95,d0
  1873.  bge dontbothercantseeit
  1874.  move.w rightclip,d1
  1875.  blt dontbothercantseeit
  1876.  cmp.w d1,d0
  1877.  bge dontbothercantseeit
  1878.  
  1879.  move.l PLR1_yoff,d0
  1880.  cmp.l SplitHeight,d0
  1881.  blt.s botfirst
  1882.  
  1883.  move.l ThisRoomToDraw+4,a0
  1884.  cmp.l #LEVELGRAPHICS,a0
  1885.  beq.s noupperroom
  1886.  st DOUPPER
  1887.  bsr dothisroom
  1888. noupperroom:
  1889.  move.l ThisRoomToDraw,a0
  1890.  clr.b DOUPPER
  1891.  bsr dothisroom
  1892.  
  1893.  bra dontbothercantseeit
  1894. botfirst:
  1895.  
  1896.  move.l ThisRoomToDraw,a0
  1897.  clr.b DOUPPER
  1898.  bsr dothisroom
  1899.  move.l ThisRoomToDraw+4,a0
  1900.  cmp.l #LEVELGRAPHICS,a0
  1901.  beq.s noupperroom2
  1902.  st DOUPPER
  1903.  bsr dothisroom
  1904. noupperroom2:
  1905.  
  1906. dontbothercantseeit:
  1907. pastemp:
  1908.  
  1909.  move.l (a7)+,a1
  1910.  move.l ThisRoomToDraw,a0
  1911.  move.w (a0),d7
  1912.  adda.w #8,a1
  1913.  bra finditit
  1914.  
  1915. nomoretodoatall:
  1916.  
  1917.  move.l (a7)+,a0
  1918.  
  1919.  bra subroomloop
  1920.  
  1921. jumpoutofrooms:
  1922.  
  1923.  rts
  1924.  
  1925. prot9: dc.w 0
  1926.  
  1927. TempBuffer: ds.l 100 
  1928.  
  1929. ClipTable: ds.l 30
  1930. EndOfClipPt: dc.l 0
  1931. DOUPPER: dc.w 0
  1932.  
  1933. dothisroom
  1934.  
  1935.  move.w (a0)+,d0
  1936.  move.w d0,currzone
  1937.  move.l #ZoneBrightTable,a1
  1938.  move.l (a1,d0.w*4),d1
  1939.  tst.b DOUPPER
  1940.  bne.s .okbot
  1941.  swap d1
  1942. .okbot:
  1943.  move.w d1,ZoneBright
  1944.  
  1945. polyloop:
  1946.  move.w (a0)+,d0
  1947.  blt jumpoutofloop
  1948.  beq itsawall
  1949.  cmp.w #3,d0
  1950.  beq itsasetclip
  1951.  blt itsafloor
  1952.  cmp.w #4,d0
  1953.  beq itsanobject
  1954.  cmp.w #5,d0
  1955.  beq.s itsanarc
  1956.  cmp.w #6,d0
  1957.  beq itsalightbeam
  1958.  cmp.w #7,d0
  1959.  beq.s itswater
  1960.  cmp.w #9,d0
  1961.  ble itsachunkyfloor
  1962.  cmp.w #11,d0
  1963.  ble.s itsabumpyfloor
  1964.  cmp.w #12,d0
  1965.  beq.s itsbackdrop
  1966.  cmp.w #13,d0
  1967.  beq.s itsaseewall
  1968.  
  1969.  bra polyloop
  1970.  
  1971. itsaseewall:
  1972.  st seethru
  1973.  jsr itsawalldraw
  1974.  bra polyloop
  1975.  
  1976. itsbackdrop:
  1977.  jsr putinbackdrop
  1978.  bra polyloop
  1979.  
  1980. itswater:
  1981.  move.w #1,d0
  1982.  move.l #FloorLine,LineToUse
  1983.  st usewater
  1984.  clr.b usebumps
  1985.  jsr itsafloordraw
  1986.  bra polyloop
  1987.  
  1988. itsanarc:
  1989.  jsr CurveDraw
  1990.  bra polyloop
  1991. itsanobject:
  1992.  jsr ObjDraw
  1993.  bra polyloop
  1994. itsalightbeam:
  1995.  jsr LightDraw
  1996.  bra polyloop
  1997.  
  1998. itsabumpyfloor:
  1999.  sub.w #9,d0
  2000.  st usebumps
  2001.  st smoothbumps
  2002.  clr.b usewater
  2003.  move.l #BumpLine,LineToUse
  2004.  jsr itsafloordraw
  2005.  bra polyloop
  2006.  
  2007. itsachunkyfloor:
  2008.  subq.w #7,d0
  2009.  st usebumps
  2010.  sub.w #12,topclip
  2011. ; add.w #10,botclip
  2012.  clr.b smoothbumps
  2013.  clr.b usewater
  2014.  move.l #BumpLine,LineToUse
  2015.  jsr itsafloordraw
  2016.  add.w #12,topclip
  2017. ; sub.w #10,botclip
  2018.  bra polyloop 
  2019.  
  2020. itsafloor:
  2021.  
  2022.  move.l #FloorLine,LineToUse
  2023. * 1,2 = floor/roof
  2024.  clr.b usewater
  2025.  clr.b usebumps
  2026.  jsr itsafloordraw
  2027.  bra polyloop
  2028. itsasetclip:
  2029.  bra polyloop
  2030. itsawall:
  2031.  clr.b seethru
  2032. ; move.l #stripbuffer,a1
  2033.  jsr itsawalldraw
  2034.  bra polyloop
  2035.  
  2036. jumpoutofloop:
  2037.  rts
  2038.  
  2039. ThisRoomToDraw: dc.l 0,0
  2040. SplitHeight: dc.l 0
  2041.  
  2042.  include "ab3:source/OrderZones"
  2043.  
  2044. ReadMouse:
  2045.  clr.l d0
  2046.  clr.l d1
  2047.  move.w $a(a6),d0
  2048.  lsr.w #8,d0
  2049.  ext.l d0
  2050.  move.w d0,d3
  2051.  move.w oldmy,d2
  2052.  sub.w d2,d0
  2053.  
  2054.  cmp.w #127,d0
  2055.  blt nonegy
  2056.  move.w #255,d1
  2057.  sub.w d0,d1
  2058.  move.w d1,d0
  2059.  neg.w d0
  2060. nonegy:
  2061.  
  2062.  cmp.w #-127,d0
  2063.  bge nonegy2
  2064.  move.w #255,d1
  2065.  add.w d0,d1
  2066.  move.w d1,d0
  2067. nonegy2:
  2068.  
  2069.  add.b d0,d2
  2070.  add.w d0,oldy2
  2071.  move.w d2,oldmy
  2072.  move.w d2,d0
  2073.  
  2074.  move.w oldy2,d0
  2075.  move.w d0,ymouse
  2076.  
  2077.  clr.l d0
  2078.  clr.l d1
  2079.  move.w $a(a6),d0
  2080.  ext.w d0
  2081.  ext.l d0
  2082.  move.w d0,d3
  2083.  move.w oldmx,d2
  2084.  sub.w d2,d0
  2085.  
  2086.  cmp.w #127,d0
  2087.  blt nonegx
  2088.  move.w #255,d1
  2089.  sub.w d0,d1
  2090.  move.w d1,d0
  2091.  neg.w d0
  2092. nonegx:
  2093.  
  2094.  cmp.w #-127,d0
  2095.  bge nonegx2
  2096.  move.w #255,d1
  2097.  add.w d0,d1
  2098.  move.w d1,d0
  2099. nonegx2:
  2100.  
  2101.  add.b d0,d2
  2102.  move.w d0,d1
  2103.  move.w d2,oldmx
  2104.  
  2105.  move.w #$0,$dff034
  2106.  btst #2,$dff016
  2107.  beq.s noturn
  2108.  
  2109.  add.w d0,oldx2
  2110.  move.w oldx2,d0
  2111.  and.w #2047,d0
  2112.  move.w d0,oldx2
  2113.  
  2114.  asl.w #2,d0
  2115.  sub.w prevx,d0
  2116.  add.w d0,prevx
  2117.  add.w d0,PLR1s_angpos
  2118.  move.w #0,lrs
  2119.  rts
  2120.  
  2121. noturn:
  2122.  
  2123. ; got to move lr instead. 
  2124.  
  2125. ; d1 = speed moved l/r
  2126.  
  2127.  move.w d1,lrs
  2128.  
  2129.  rts
  2130.  
  2131. lrs: dc.w 0
  2132. prevx: dc.w 0
  2133.  
  2134. mang: dc.w 0
  2135. oldymouse: dc.w 0
  2136. xmouse: dc.w 0
  2137. ymouse: dc.w 0
  2138. oldx2: dc.w 0
  2139. oldmx: dc.w 0
  2140. oldmy: dc.w 0
  2141. oldy2: dc.w 0
  2142.  
  2143. RotateLevelPts:
  2144.  
  2145.  move.w sinval,d6
  2146.  swap d6
  2147.  move.w cosval,d6
  2148.  
  2149.  move.l PointsToRotatePtr,a0
  2150.  move.l Points,a3
  2151.  move.l #Rotated,a1
  2152.  move.l #OnScreen,a2
  2153.  move.w xoff,d4
  2154.  move.w zoff,d5
  2155.  
  2156. ; move.w #$c40,$dff106
  2157. ; move.w #$f00,$dff180
  2158.  
  2159. pointrotlop:
  2160.  move.w (a0)+,d7
  2161.  blt.s outofpointrot
  2162.  
  2163.  move.w (a3,d7*4),d0
  2164.  sub.w d4,d0
  2165.  move.w d0,d2
  2166.  move.w 2(a3,d7*4),d1
  2167.  sub.w d5,d1
  2168.  muls d6,d2
  2169.  swap d6
  2170.  move.w d1,d3
  2171.  muls d6,d3
  2172.  sub.l d3,d2
  2173.  add.l d2,d2
  2174.  swap d2
  2175.  ext.l d2
  2176.  asl.l #7,d2
  2177.  add.l xwobble,d2
  2178.  move.l d2,(a1,d7*8)
  2179.  
  2180.  muls d6,d0
  2181.  swap d6
  2182.  muls d6,d1
  2183.  add.l d0,d1
  2184.  asl.l #2,d1
  2185.  swap d1
  2186.  move.l d1,4(a1,d7*8)
  2187.  
  2188.  tst.w d1
  2189.  bgt.s ptnotbehind
  2190.  tst.w d2
  2191.  bgt.s onrightsomewhere
  2192.  move.w #0,d2
  2193.  bra putin
  2194. onrightsomewhere:
  2195.  move.w #96,d2
  2196.  bra putin
  2197. ptnotbehind:
  2198.  
  2199.  divs d1,d2
  2200.  add.w #47,d2
  2201. putin:
  2202.  move.w d2,(a2,d7*2)
  2203.  
  2204.  bra pointrotlop
  2205. outofpointrot:
  2206.  
  2207. ; move.w #$c40,$dff106
  2208. ; move.w #$ff0,$dff180
  2209.  
  2210.  rts
  2211.  
  2212. RotateObjectPts:
  2213.  
  2214.  move.w sinval,d5
  2215.  move.w cosval,d6
  2216.  
  2217.  move.l ObjectData,a4
  2218.  move.l ObjectPoints,a0
  2219.  move.w NumObjectPoints,d7
  2220.  move.l #ObjRotated,a1
  2221.  move.l #ObsInLine,a2
  2222. objpointrotlop:
  2223.  
  2224.  move.w (a0),d0
  2225.  sub.w xoff,d0
  2226.  move.w 4(a0),d1
  2227.  addq #8,a0
  2228.  
  2229.  tst.w 12(a4)
  2230.  blt noworkout
  2231.  
  2232.  sub.w zoff,d1
  2233.  move.w d0,d2
  2234.  muls d6,d2
  2235.  move.w d1,d3
  2236.  muls d5,d3
  2237.  sub.l d3,d2
  2238.  add.l d2,d2
  2239.  swap d2
  2240.  move.w d2,(a1)+
  2241.  
  2242.  muls d5,d0
  2243.  muls d6,d1
  2244.  add.l d0,d1
  2245.  asl.l #2,d1
  2246.  swap d1
  2247.  moveq #0,d3
  2248.  
  2249.  move.w d1,(a1)+
  2250.  ext.l d2
  2251.  asl.l #7,d2
  2252.  add.l xwobble,d2
  2253.  move.l d2,(a1)+
  2254.  sub.l xwobble,d2
  2255.  tst.w d1
  2256.  ble.s notinline
  2257.  
  2258.  
  2259.  move.l d2,d3
  2260.  divs d1,d2
  2261.  cmp.w #-20,d2
  2262.  blt.s notinline
  2263.  cmp.w #20,d2
  2264.  sle d3
  2265. notinline
  2266.  move.b d3,(a2)+
  2267.  
  2268.  add.w #64,a4
  2269.  dbra d7,objpointrotlop
  2270.  
  2271.  rts
  2272.  
  2273. noworkout:
  2274.   clr.b (a2)+
  2275.   move.l #0,(a1)+
  2276.   move.l #0,(a1)+
  2277.   add.w #64,a4
  2278.   dbra d7,objpointrotlop
  2279.   rts
  2280.  
  2281. LightDraw:
  2282.  
  2283.  move.w (a0)+,d0
  2284.  move.w (a0)+,d1
  2285.  move.l #Rotated,a1
  2286.  move.w 6(a1,d0.w*8),d2
  2287.  ble.s oneendbehind
  2288.  move.w 6(a1,d1.w*8),d3
  2289.  bgt.s bothendsinfront
  2290.  
  2291. oneendbehind:
  2292.  rts
  2293. bothendsinfront:
  2294.  
  2295.  move.l #OnScreen,a2
  2296.  move.w (a2,d0.w*2),d0
  2297.  bge.s okleftend
  2298.  moveq #0,d0
  2299. okleftend:
  2300.  move.w (a2,d1.w*2),d1
  2301.  bgt.s somevis
  2302.  rts
  2303. somevis:
  2304.  cmp.w #95,d0
  2305.  ble.s somevis2
  2306.  rts
  2307. somevis2:
  2308.  cmp.w #95,d1
  2309.  ble.s okrightend
  2310.  move.w #95,d1
  2311. okrightend:
  2312.  
  2313.  sub.w d0,d1
  2314.  blt.s wrongbloodywayround
  2315.  move.l #brightentab,a4
  2316.  move.l #objintocop,a1
  2317.  lea (a1,d0.w*2),a1
  2318.  
  2319.  move.l frompt,a3
  2320.  move.w #104*4,d6
  2321.  move.w #79,d2
  2322. lacross:
  2323.  move.w d2,d3
  2324.  move.l a3,a2
  2325.  adda.w (a1)+,a2
  2326. ldown:
  2327.  add.w d6,a2
  2328.  move.w (a2),d7
  2329.  move.w (a4,d7.w*2),(a2)
  2330.  dbra d3,ldown
  2331.  dbra d1,lacross
  2332.  
  2333. wrongbloodywayround:
  2334.  
  2335.  rts
  2336.  
  2337. FaceToPlace: dc.w 0
  2338.  
  2339. Cheese:
  2340.  dc.w 4,15
  2341.  
  2342. FacesList:
  2343.  dc.w 0,4*4
  2344.  dc.w 1,2*4
  2345.  dc.w 0,2*4
  2346.  dc.w 2,2*4
  2347.  dc.w 0,2*4
  2348.  dc.w 1,3*4
  2349.  dc.w 0,2*4
  2350.  dc.w 2,3*4
  2351.  dc.w 0,5*4
  2352.  dc.w 1,2*4
  2353.  dc.w 0,2*4
  2354.  dc.w 2,2*4
  2355.  dc.w 0,2*4
  2356.  dc.w 1,2*4
  2357.  dc.w 0,2*4
  2358.  dc.w 2,3*4
  2359.  dc.w 0,1*4
  2360.  dc.w 1,3*4
  2361.  dc.w 0,1*4
  2362.  dc.w 2,3*4
  2363.  dc.w 0,1*4
  2364.  
  2365. EndOfFacesList:
  2366.  
  2367. FacesPtr:
  2368.  dc.l FacesList
  2369. FacesCounter:
  2370.  dc.w 0
  2371. Expression:
  2372.  dc.w 0
  2373.  
  2374. PlaceFace:
  2375.  
  2376.  move.w FacesCounter,d0
  2377.  subq #1,d0
  2378.  bgt.s NoNewFace
  2379.  
  2380.  move.l FacesPtr,a0
  2381.  
  2382.  move.w 2(a0),d0
  2383.  move.w (a0),Expression
  2384.  addq #4,a0
  2385.  cmp.l #EndOfFacesList,a0
  2386.  blt.s NotFirstFace
  2387.  
  2388.  move.l #FacesList,a0
  2389.  
  2390. NotFirstFace
  2391.  move.l a0,FacesPtr
  2392.  
  2393. NoNewFace:
  2394.  
  2395.  move.w d0,FacesCounter
  2396.  
  2397.  Move.w FaceToPlace,d0
  2398.  muls #5,d0
  2399.  add.w Expression,d0
  2400.  move.l #FacePlace+10,a0
  2401.  move.l #Faces,a1
  2402.  muls #(4*32*5),d0
  2403.  adda.w d0,a1
  2404.  move.w #4,d0
  2405.  move.w #24,d1
  2406.  
  2407.  move.w #4,d3
  2408. bitplaneloop:
  2409.  move.w #31,d2
  2410. PlaceFaceToPlaceInFacePlaceLoop:
  2411.  move.l (a1),(a0)
  2412.  adda.w d0,a1
  2413.  adda.w d1,a0
  2414.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  2415.  dbra d3,bitplaneloop
  2416.  
  2417.  rts
  2418.  
  2419. Energy:
  2420.  dc.w 191
  2421. OldEnergy:
  2422.  dc.w 191
  2423. Ammo: dc.w 63
  2424. OldAmmo: dc.w 63
  2425.  
  2426. FullEnergy:
  2427.  move.w #127,Energy
  2428.  move.w #127,OldEnergy
  2429.  move.l #health,a0
  2430.  move.l #borders,a1
  2431.  add.l #25*8*2+6,a1
  2432.  lea 2592(a1),a2
  2433.  move.w #127,d0
  2434. PutInFull:
  2435.  move.b (a0)+,(a1)
  2436.  move.b (a0)+,8(a1)
  2437.  add.w #16,a1
  2438.  move.b (a0)+,(a2)
  2439.  move.b (a0)+,8(a2)
  2440.  add.w #16,a2
  2441.  dbra d0,PutInFull
  2442.  
  2443.  rts
  2444.  
  2445. EnergyBar:
  2446.  
  2447.  move.w Energy,d0
  2448.  cmp.w OldEnergy,d0
  2449.  bne.s gottochange
  2450.  
  2451. NoChange
  2452.  rts
  2453.  
  2454. gottochange:
  2455.   
  2456.  blt LessEnergy
  2457.  cmp.w #127,Energy
  2458.  blt.s NotMax
  2459.  move.w #127,Energy
  2460. NotMax:
  2461.  
  2462.  move.w Energy,d0
  2463.  move.w OldEnergy,d2
  2464.  sub.w d0,d2
  2465.  beq.s NoChange    
  2466.  neg.w d2
  2467.  
  2468.  move.w #127,d3
  2469.  sub.w d0,d3
  2470.  
  2471.  move.l #health,a0
  2472.  lea (a0,d3.w*4),a0
  2473.  move.l #borders+25*16+6,a1
  2474.  lsl.w #4,d3
  2475.  add.w d3,a1
  2476.  lea 2592(a1),a2
  2477.  
  2478. EnergyRise:
  2479.  move.b (a0)+,(a1)
  2480.  move.b (a0)+,8(a1)
  2481.  add.w #16,a1
  2482.  move.b (a0)+,(a2)
  2483.  move.b (a0)+,8(a2)
  2484.  add.w #16,a2
  2485.  subq #1,d2
  2486.  bgt.s EnergyRise
  2487.  
  2488.  move.w Energy,OldEnergy
  2489.  
  2490.  rts 
  2491.  
  2492. LessEnergy: 
  2493.  move.w OldEnergy,d2
  2494.  sub.w d0,d2
  2495.  
  2496.  move.w #127,d3
  2497.  sub.w OldEnergy,d3
  2498.  
  2499.  move.l #borders+25*16+6,a1
  2500.  asl.w #4,d3
  2501.  add.w d3,a1
  2502.  lea 2592(a1),a2
  2503.  
  2504. EnergyDrain:
  2505.  move.b #0,(a1)
  2506.  move.b #0,8(a1)
  2507.  move.b #0,(a2)
  2508.  move.b #0,8(a2)
  2509.  add.w #16,a1
  2510.  add.w #16,a2
  2511.  subq #1,d2
  2512.  bgt.s EnergyDrain
  2513.  
  2514.  move.w Energy,OldEnergy
  2515.  
  2516.  rts 
  2517.  
  2518. AmmoBar:
  2519.  
  2520.  move.w Ammo,d0
  2521.  cmp.w OldAmmo,d0
  2522.  bne.s .gottochange
  2523.  
  2524. .NoChange
  2525.  rts
  2526.  
  2527. .gottochange:
  2528.   
  2529.  blt LessAmmo
  2530.  cmp.w #63,Ammo
  2531.  blt.s .NotMax
  2532.  move.w #63,Ammo
  2533. .NotMax:
  2534.  
  2535.  move.w Ammo,d0
  2536.  move.w OldAmmo,d2
  2537.  sub.w d0,d2
  2538.  beq.s .NoChange
  2539.  neg.w d2
  2540.  
  2541.  move.w #63,d3
  2542.  sub.w d0,d3
  2543.  
  2544.  move.l #Ammunition,a0
  2545.  lea (a0,d3.w*8),a0
  2546.  move.l #borders+5184+25*16+1,a1
  2547.  lsl.w #5,d3
  2548.  add.w d3,a1
  2549.  lea 2592(a1),a2
  2550.  
  2551. AmmoRise:
  2552.  move.b (a0)+,(a1)
  2553.  move.b (a0)+,8(a1)
  2554.  add.w #16,a1
  2555.  move.b (a0)+,(a2)
  2556.  move.b (a0)+,8(a2)
  2557.  add.w #16,a2
  2558.  move.b (a0)+,(a1)
  2559.  move.b (a0)+,8(a1)
  2560.  add.w #16,a1
  2561.  move.b (a0)+,(a2)
  2562.  move.b (a0)+,8(a2)
  2563.  add.w #16,a2
  2564.  subq #1,d2
  2565.  bgt.s AmmoRise
  2566.  
  2567.  move.w Ammo,OldAmmo
  2568.  
  2569.  rts 
  2570.  
  2571.  
  2572. LessAmmo: 
  2573.  move.w OldAmmo,d2
  2574.  sub.w d0,d2
  2575.  
  2576.  move.w #63,d3
  2577.  sub.w OldAmmo,d3
  2578.  
  2579.  move.l #borders++5184+25*16+1,a1
  2580.  asl.w #5,d3
  2581.  add.w d3,a1
  2582.  lea 2592(a1),a2
  2583.  
  2584. AmmoDrain:
  2585.  move.b #0,(a1)
  2586.  move.b #0,8(a1)
  2587.  move.b #0,(a2)
  2588.  move.b #0,8(a2)
  2589.  add.w #16,a1
  2590.  add.w #16,a2
  2591.  move.b #0,(a1)
  2592.  move.b #0,8(a1)
  2593.  move.b #0,(a2)
  2594.  move.b #0,8(a2)
  2595.  add.w #16,a1
  2596.  add.w #16,a2
  2597.  subq #1,d2
  2598.  bgt.s AmmoDrain
  2599.  
  2600.  move.w Ammo,OldAmmo
  2601.  
  2602.  rts 
  2603.  
  2604. nulop:
  2605.  move.w #$0010,$dff000+intreq
  2606.  rte
  2607.  
  2608. doanything: dc.w 0
  2609.  
  2610. end:
  2611.  
  2612.  move.l drawpt,d0
  2613.  move.l olddrawpt,drawpt
  2614.  move.l d0,olddrawpt
  2615.  move.l d0,$dff084
  2616.  
  2617.  clr.b doanything
  2618.  cmp.b #'b',Prefsfile+3
  2619.  bne.s .noback
  2620.  jsr mt_end
  2621. .noback
  2622.  tst.w Energy
  2623.  bgt.s wevewon
  2624.  
  2625.  move.l #gameover,mt_data
  2626.  st UseAllChannels
  2627.  clr.b reachedend
  2628.  jsr mt_init
  2629. playgameover:
  2630.  move.l #$dff000,a6
  2631. waitfortop2:
  2632.  btst.b #0,intreqrl(a6)
  2633.  beq waitfortop2
  2634.  move.w #$1,intreq(a6)
  2635.  
  2636.  jsr mt_music
  2637.  
  2638.  tst.b reachedend
  2639.  beq.s playgameover
  2640.  
  2641.  bra wevelost
  2642. wevewon:
  2643.  move.l #welldone,mt_data
  2644.  st UseAllChannels
  2645.  clr.b reachedend
  2646.  jsr mt_init
  2647. playwelldone:
  2648.  move.l #$dff000,a6
  2649. waitfortop3:
  2650.  btst.b #0,intreqrl(a6)
  2651.  beq waitfortop3
  2652.  move.w #$1,intreq(a6)
  2653.  
  2654.  jsr mt_music
  2655.  
  2656.  tst.b reachedend
  2657.  beq.s playwelldone
  2658.  
  2659.  
  2660. wevelost:
  2661.  jmp closeeverything 
  2662.  
  2663. endnomusic
  2664.  clr.b doanything
  2665.  cmp.b #'b',Prefsfile+3
  2666.  bne.s .noback
  2667.  jsr mt_end
  2668. .noback
  2669.  jmp closeeverything
  2670.  
  2671. do32:
  2672.  move.w #31,d7
  2673.  move.w #$180,d1
  2674. across:
  2675.  move.w d1,(a1)+
  2676.  move.w d1,(a3)+
  2677.  move.w #0,(a1)+
  2678.  move.w #0,(a3)+
  2679.  add.w #2,d1
  2680.  dbra d7,across
  2681.  rts
  2682.  
  2683.  
  2684.  
  2685. *************************************
  2686. * Set left and right clip values
  2687. *************************************
  2688.  
  2689.  
  2690.  
  2691. NEWsetlclip:
  2692.  move.l #OnScreen,a1
  2693.  move.l #Rotated,a2
  2694.  move.l CONNECT_TABLE,a3
  2695.  
  2696.  move.w (a0),d0
  2697.  bge.s .notignoreleft
  2698.  
  2699. ; move.l #0,(a6)
  2700.  
  2701.  bra .leftnotoktoclip
  2702. .notignoreleft:
  2703.  
  2704.  move.w 6(a2,d0*8),d3    ; left z val
  2705.  bgt.s .leftclipinfront
  2706.  addq #2,a0
  2707.  rts
  2708.  
  2709.  tst.w 6(a2,d0*8)
  2710.  bgt.s .leftnotoktoclip
  2711. .ignoreboth:
  2712. ; move.l #0,(a6)
  2713. ; move.l #96*65536,4(a6)
  2714.  move.w #0,leftclip
  2715.  move.w #96,rightclip
  2716.  addq #8,a6
  2717.  addq #2,a0
  2718.  rts
  2719.  
  2720. .leftclipinfront:
  2721.  move.w (a1,d0*2),d1    ; left x on screen
  2722.  move.w (a0),d2
  2723.  move.w 2(a3,d2.w*4),d2
  2724.  move.w (a1,d2.w*2),d2
  2725.  cmp.w d1,d2
  2726.  bgt.s .leftnotoktoclip
  2727.  
  2728. ; move.w d1,(a6)
  2729. ; move.w d3,2(a6)
  2730.  cmp.w leftclip(pc),d1
  2731.  ble.s .leftnotoktoclip
  2732.  move.w d1,leftclip
  2733. .leftnotoktoclip:
  2734.  
  2735.  addq #2,a0
  2736.  
  2737.  rts
  2738.  
  2739. NEWsetrclip
  2740.  move.l #OnScreen,a1
  2741.  move.l #Rotated,a2
  2742.  move.l CONNECT_TABLE,a3
  2743.  move.w (a0),d0
  2744.  bge.s .notignoreright
  2745. ; move.w #96,4(a6)
  2746. ; move.w #0,6(a6)
  2747.  move.w #0,d4
  2748.  bra .rightnotoktoclip
  2749. .notignoreright:
  2750.  move.w 6(a2,d0*8),d4    ; right z val
  2751.  bgt.s .rightclipinfront
  2752. ; move.w #96,4(a6)
  2753. ; move.w #0,6(a6)
  2754.  bra.s .rightnotoktoclip
  2755.  
  2756. .rightclipinfront:
  2757.  move.w (a1,d0*2),d1    ; right x on screen
  2758.  move.w (a0),d2
  2759.  move.w (a3,d2.w*4),d2
  2760.  move.w (a1,d2.w*2),d2
  2761.  cmp.w d1,d2
  2762.  blt.s .rightnotoktoclip
  2763. ; move.w d1,4(a6)
  2764. ; move.w d4,6(a6)
  2765.  
  2766.  cmp.w rightclip(pc),d1
  2767.  bge.s .rightnotoktoclip
  2768.  addq #1,d1
  2769.  move.w d1,rightclip
  2770. .rightnotoktoclip:
  2771.  addq #8,a6
  2772.  addq #2,a0
  2773.  rts
  2774.  
  2775. FIRSTsetlrclip:
  2776.  move.l #OnScreen,a1
  2777.  move.l #Rotated,a2
  2778.  
  2779.  move.w (a0)+,d0
  2780.  bge.s .notignoreleft
  2781.  bra .leftnotoktoclip
  2782. .notignoreleft:
  2783.  
  2784.  move.w 6(a2,d0*8),d3    ; left z val
  2785.  bgt.s .leftclipinfront
  2786.  
  2787.  move.w (a0),d0
  2788.  blt.s .ignoreboth
  2789.  tst.w 6(a2,d0*8)
  2790.  bgt.s .leftnotoktoclip
  2791. .ignoreboth
  2792.  move.w #96,rightclip
  2793.  move.w #0,leftclip
  2794.  addq #2,a0
  2795.  rts
  2796.  
  2797. .leftclipinfront:
  2798.  move.w (a1,d0*2),d1    ; left x on screen
  2799.  cmp.w leftclip(pc),d1
  2800.  ble.s .leftnotoktoclip
  2801.  move.w d1,leftclip
  2802. .leftnotoktoclip:
  2803.  
  2804.  move.w (a0)+,d0
  2805.  bge.s .notignoreright
  2806.  move.w #0,d4
  2807.  bra .rightnotoktoclip
  2808. .notignoreright:
  2809.  move.w 6(a2,d0*8),d4    ; right z val
  2810.  ble.s .rightnotoktoclip
  2811.  
  2812. .rightclipinfront:
  2813.  move.w (a1,d0*2),d1    ; right x on screen
  2814.  cmp.w rightclip(pc),d1
  2815.  bge.s .rightnotoktoclip
  2816.  addq #1,d1
  2817.  move.w d1,rightclip
  2818. .rightnotoktoclip:
  2819.  
  2820. ; move.w leftclip,d0
  2821. ; move.w rightclip,d1
  2822. ; cmp.w d0,d1
  2823. ; bge.s .noswap
  2824. ; move.w #96,rightclip
  2825. ; move.w #0,leftclip
  2826. ;.noswap:
  2827.  
  2828.  rts
  2829.  
  2830.  
  2831. leftclip2: dc.w 0
  2832. rightclip2: dc.w 0
  2833. ZoneBright: dc.w 0
  2834.  
  2835. npolys: dc.w 0
  2836.  
  2837. PLR1_fire: dc.b 0
  2838. PLR2_fire: dc.b 0
  2839.  
  2840. turnleftright:
  2841.  
  2842.  move.w PLR2_angspd,d1
  2843.  move.w PLR2_angpos,d0
  2844.  
  2845.  move.w #120,d7
  2846.  muls TempFrames,d7
  2847.  
  2848.  move.w d1,d2
  2849.  neg.w d2
  2850.  cmp.w d7,d2
  2851.  ble.s okslow
  2852.  move.w d7,d2
  2853. okslow
  2854.  neg.w d7
  2855.  cmp.w d7,d2
  2856.  bge.s okslo
  2857.  move.w d7,d2
  2858. okslo:
  2859.  
  2860.  asr.w #1,d7
  2861.  
  2862.  btst #1,$d(a6)
  2863.  sne d3
  2864.  beq.s notleft
  2865.  move.w d7,d2
  2866.  neg.w d2
  2867. ; tst.w d1
  2868. ; bge.s notleft
  2869. ; moveq #0,d1
  2870. notleft
  2871.  
  2872.  btst #1,$c(a6)
  2873.  sne d4
  2874.  beq.s notright
  2875.  move.w d7,d2
  2876. ; tst.w d1
  2877. ; ble.s notright
  2878. ; moveq #0,d1
  2879. notright
  2880.  
  2881.  move.w #0,PLR2_ForwardSpd
  2882.  
  2883.  btst #0,$dff00c
  2884.  sne d5
  2885.  eor.b d4,d5
  2886.  beq.s notup
  2887.  move.w TempFrames,d7
  2888.  neg.w d7
  2889.  asl.w #2,d7
  2890.  move.w d7,PLR2_ForwardSpd
  2891. notup:
  2892.  
  2893.  btst #0,$dff00d
  2894.  sne d5
  2895.  eor.b d3,d5
  2896.  beq.s notdown
  2897.  move.w TempFrames,d7
  2898.  asl.w #2,d7
  2899.  move.w d7,PLR2_ForwardSpd
  2900. notdown:
  2901.  
  2902.  add.w d2,d1
  2903.  cmp.w #-360,d1
  2904.  bge.s okspdlft
  2905.  move.w #-360,d1
  2906. okspdlft:
  2907.  cmp.w #360,d1
  2908.  ble.s okspdrgt
  2909.  move.w #360,d1
  2910. okspdrgt:
  2911.  
  2912.  move.w d1,PLR2_angspd
  2913.  add.w d1,d0
  2914.  and.w #8191,d0
  2915.  move.w d0,PLR2_angpos
  2916.  rts
  2917.  
  2918. *****************************************************
  2919.  
  2920.  include "ab3:source/ObjectMove"
  2921.  
  2922. pastdata:
  2923. ***********************************
  2924. * This routine animates brightnesses.
  2925.  
  2926.  
  2927. liftpt: dc.l liftanimtab
  2928.  
  2929. brightpt:
  2930.  dc.l brightanimtab
  2931.  
  2932.  
  2933. liftanim:
  2934.  rts
  2935.  
  2936. ******************************
  2937.  include "ab3:source/Anims"
  2938. ******************************
  2939. startpass:
  2940. ; include "ab3:source/password_reloc.s"
  2941. endpass:
  2942.  
  2943. rotanimpt: dc.w 0
  2944. xradd: dc.w 5
  2945. yradd: dc.w 8
  2946. xrpos: dc.w 320
  2947. yrpos: dc.w 320
  2948.  
  2949. rotanim:
  2950.  rts
  2951.  
  2952. option:
  2953.  dc.l 0,0
  2954.  
  2955. ********** WALL STUFF *******************************
  2956.  
  2957.  include "AB3:source/wallroutine3.chipmem"
  2958.  
  2959. *****************************************************
  2960.  
  2961. ******************************************
  2962. * floor polygon
  2963.  
  2964. numsidestd: dc.w 0
  2965. bottomline: dc.w 0
  2966.  
  2967. NewCornerBuff:
  2968.  ds.l 100
  2969.  
  2970. itsafloordraw:
  2971.  
  2972. * If D0 =1 then its a floor otherwise (=2) it's
  2973. * a roof.
  2974.  
  2975.  move.w #0,above
  2976.  move.w (a0)+,d6    ; ypos of poly
  2977.  
  2978.  move.w leftclip(pc),d7
  2979.  cmp.w rightclip(pc),d7
  2980.  bge.s dontdrawreturn
  2981.  
  2982.  move.w botclip,d7
  2983.  sub.w #40,d7
  2984.  ble.s dontdrawreturn
  2985.  sub.w flooryoff,d6
  2986.  bgt.s below
  2987.  blt.s aboveplayer
  2988. dontdrawreturn:
  2989.  move.w (a0)+,d6    ; sides-1
  2990.  add.w d6,d6
  2991.  add.w d6,a0
  2992.  add.w #4+6,a0
  2993.  rts
  2994. aboveplayer:
  2995.  cmp.w #2,d0
  2996.  bne.s dontdrawreturn
  2997.  move.w #40,d7
  2998.  sub.w topclip,d7 
  2999.  blt.s dontdrawreturn
  3000.  move.w #1,d0
  3001.  move.w d0,above
  3002.  neg.w d6
  3003. below:
  3004.  cmp.w #1,d0
  3005.  bne.s dontdrawreturn
  3006.  move.w d6,distaddr
  3007.  muls #64,d6
  3008.  move.l d6,ypos
  3009.  divs d7,d6        ; zpos of bottom
  3010.             ; visible line
  3011.  move.w d6,minz
  3012.  move.w d7,bottomline
  3013.  
  3014. ; Go round each point finding out
  3015. ; if it should be visible or not.
  3016.  
  3017.  move.l a0,-(a7)
  3018.  
  3019.  move.w (a0)+,d7    ; number of sides
  3020.  move.l #Rotated,a1
  3021.  move.l #OnScreen,a2
  3022.  move.l #NewCornerBuff,a3
  3023.  moveq #0,d4
  3024.  moveq #0,d5
  3025.  moveq #0,d6
  3026.  clr.b anyclipping
  3027.  
  3028. cornerprocessloop:
  3029.  
  3030.  move.w (a0)+,d0
  3031.  move.w 6(a1,d0.w*8),d1
  3032.  ble  .canttell
  3033.  
  3034.  move.w (a2,d0.w*2),d3
  3035.  cmp.w leftclip,d3
  3036.  bgt.s .nol
  3037.  st d4
  3038.  st anyclipping
  3039.  bra.s .nos
  3040. .nol:
  3041.  cmp.w rightclip,d3
  3042.  blt.s .nor
  3043.  st d6
  3044.  st anyclipping
  3045.  bra.s .nos
  3046. .nor:
  3047.  st d5
  3048. .nos:
  3049.  bra .cantell
  3050.  
  3051. .canttell:
  3052.  st d5
  3053.  st anyclipping
  3054.  
  3055. .cantell:
  3056.  
  3057.  
  3058.  dbra d7,cornerprocessloop
  3059.  
  3060.  move.l (a7)+,a0
  3061.  tst.b d5
  3062.  bne.s somefloortodraw
  3063.  eor.b d4,d6
  3064.  bne dontdrawreturn
  3065.  
  3066. somefloortodraw:
  3067.  
  3068.  move.w #80,top
  3069.  move.w #-1,bottom
  3070.  move.w #0,drawit
  3071.  move.l #Rotated,a1
  3072.  move.l #OnScreen,a2
  3073.  move.w (a0)+,d7    ; no of sides
  3074. sideloop:
  3075.  move.w minz,d6
  3076.  move.w (a0)+,d1
  3077.  move.w (a0),d3
  3078.  move.w 6(a1,d1*8),d4    ;first z
  3079.  cmp.w d6,d4
  3080.  bgt firstinfront
  3081.  move.w 6(a1,d3*8),d5    ; sec z
  3082.  cmp.w d6,d5
  3083.  ble bothbehind
  3084. ** line must be on left and partially behind.
  3085.  sub.w d5,d4
  3086.  move.l (a1,d1*8),d0
  3087.  sub.l (a1,d3*8),d0
  3088.  asr.l #7,d0
  3089.  sub.w d5,d6
  3090.  muls d6,d0    ; new x coord
  3091.  divs d4,d0
  3092.  ext.l d0
  3093.  asl.l #7,d0
  3094.  
  3095.  add.l (a1,d3*8),d0
  3096.  move.w minz,d4
  3097.  move.w (a2,d3*2),d2
  3098.  divs d4,d0
  3099.  add.w #47,d0
  3100.  move.l ypos,d3
  3101.  divs d5,d3
  3102.  move.w bottomline,d1 
  3103.  bra lineclipped
  3104.  
  3105. firstinfront:
  3106.  move.w 6(a1,d3*8),d5    ; sec z
  3107.  cmp.w d6,d5
  3108.  bgt bothinfront
  3109. ** line must be on right and partially behind.
  3110.  sub.w d4,d5    ; dz
  3111.  move.l (a1,d3*8),d2
  3112.  sub.l (a1,d1*8),d2    ; dx
  3113.  sub.w d4,d6
  3114.  asr.l #7,d2
  3115.  muls d6,d2    ; new x coord
  3116.  divs d5,d2
  3117.  ext.l d2
  3118.  asl.l #7,d2
  3119.  add.l (a1,d1*8),d2
  3120.  move.w minz,d5
  3121.  move.w (a2,d1*2),d0
  3122.  divs d5,d2
  3123.  add.w #47,d2
  3124.  move.l ypos,d1
  3125.  divs d4,d1
  3126.  move.w bottomline,d3 
  3127.  bra lineclipped
  3128.  
  3129. bothinfront:
  3130.  
  3131. * Also, usefully enough, both are on-screen
  3132. * so no bottom clipping is needed.
  3133.  
  3134.  move.w (a2,d1*2),d0    ; first x
  3135.  move.w (a2,d3*2),d2    ; second x
  3136.  move.l ypos,d1
  3137.  move.l d1,d3
  3138.  divs d4,d1        ; first y
  3139.  divs d5,d3        ; second y
  3140. lineclipped:
  3141.  move.l #rightsidetab,a3
  3142.  cmp.w d1,d3
  3143.  beq lineflat
  3144.  st drawit
  3145.  bgt lineonright
  3146.  move.l #leftsidetab,a3
  3147.  exg d1,d3
  3148.  exg d0,d2
  3149.  
  3150.  lea (a3,d1*2),a3
  3151.  
  3152.  cmp.w top(pc),d1
  3153.  bge.s .nonewtop
  3154.  move.w d1,top
  3155. .nonewtop:
  3156.  cmp.w bottom(pc),d3
  3157.  ble.s .nonewbot
  3158.  move.w d3,bottom
  3159. .nonewbot:
  3160.  
  3161.  sub.w d1,d3    ; dy
  3162.  sub.w d0,d2    ; dx
  3163.  
  3164.  blt .linegoingleft
  3165.  sub.w #1,d0
  3166.  
  3167.  ext.l d2
  3168.  divs d3,d2
  3169.  move.w d2,d6
  3170.  swap d2
  3171.  
  3172. ; moveq #0,d6
  3173. ; sub.w d3,d2
  3174. ; blt.s .noco
  3175. ;.makeco
  3176. ; addq #1,d6
  3177. ; sub.w d3,d2
  3178. ; bge.s .makeco
  3179. ;.noco
  3180. ; add.w d3,d2
  3181.  
  3182.  move.w d3,d4
  3183.  move.w d3,d5
  3184.  subq #1,d5
  3185.  move.w d6,d1
  3186.  addq #1,d1
  3187.  
  3188. .pixlopright:
  3189.  move.w d0,(a3)+
  3190.  sub.w d2,d4
  3191.  bge.s .nobigstep
  3192.  add.w d1,d0
  3193.  add.w d3,d4
  3194.  dbra d5,.pixlopright
  3195.  bra lineflat
  3196. .nobigstep
  3197.  add.w d6,d0
  3198.  dbra d5,.pixlopright
  3199.  bra lineflat
  3200.  
  3201. .linegoingleft:
  3202.  
  3203.  sub.w #1,d0
  3204.  
  3205.  neg.w d2
  3206.  
  3207.  ext.l d2
  3208.  divs d3,d2
  3209.  move.w d2,d6
  3210.  swap d2
  3211.  
  3212.  
  3213. ; moveq #0,d6
  3214. ; sub.w d3,d2
  3215. ; blt.s .nocol
  3216. ;.makecol
  3217. ; addq #1,d6
  3218. ; sub.w d3,d2
  3219. ; bge.s .makecol
  3220. ;.nocol
  3221. ; add.w d3,d2
  3222.  
  3223.  
  3224.  
  3225.  move.w d3,d4
  3226.  move.w d3,d5
  3227.  subq #1,d5
  3228.  
  3229.  move.w d6,d1
  3230.  addq #1,d1
  3231.  
  3232. .pixlopleft:
  3233.  sub.w d2,d4
  3234.  bge.s .nobigstepl
  3235.  sub.w d1,d0
  3236.  add.w d3,d4
  3237.  move.w d0,(a3)+
  3238.  dbra d5,.pixlopleft
  3239.  bra lineflat
  3240.  
  3241. .nobigstepl
  3242.  sub.w d6,d0
  3243.  move.w d0,(a3)+
  3244.  dbra d5,.pixlopleft
  3245.  bra lineflat
  3246.  
  3247. lineonright:
  3248.  
  3249.  lea (a3,d1*2),a3
  3250.  
  3251.  cmp.w top(pc),d1
  3252.  bge.s .nonewtop
  3253.  move.w d1,top
  3254. .nonewtop:
  3255.  cmp.w bottom(pc),d3
  3256.  ble.s .nonewbot
  3257.  move.w d3,bottom
  3258. .nonewbot:
  3259.  
  3260.  sub.w d1,d3    ; dy
  3261.  sub.w d0,d2    ; dx
  3262.  blt .linegoingleft
  3263. ; addq #1,d0
  3264.  ext.l d2
  3265.  divs d3,d2
  3266.  move.w d2,d6
  3267.  swap d2
  3268.  
  3269. ; moveq #0,d6
  3270. ; sub.w d3,d2
  3271. ; blt.s .noco
  3272. ;.makeco
  3273. ; addq #1,d6
  3274. ; sub.w d3,d2
  3275. ; bge.s .makeco
  3276. ;.noco
  3277. ; add.w d3,d2
  3278.  
  3279.  move.w d3,d4
  3280.  move.w d3,d5
  3281.  subq #1,d5
  3282.  move.w d6,d1
  3283.  addq #1,d1
  3284.  
  3285. .pixlopright:
  3286.  sub.w d2,d4
  3287.  bge.s .nobigstep
  3288.  add.w d1,d0
  3289.  add.w d3,d4
  3290.  move.w d0,(a3)+
  3291.  dbra d5,.pixlopright
  3292.  bra lineflat
  3293.  
  3294. .nobigstep
  3295.  add.w d6,d0
  3296.  move.w d0,(a3)+
  3297.  dbra d5,.pixlopright
  3298.  bra lineflat
  3299.  
  3300. .linegoingleft:
  3301. ; addq #1,d0
  3302.  neg.w d2
  3303.  
  3304.  ext.l d2
  3305.  divs d3,d2
  3306.  move.w d2,d6
  3307.  swap d2
  3308.  
  3309.  
  3310. ; moveq #0,d6
  3311. ; sub.w d3,d2
  3312. ; blt.s .nocol
  3313. ;.makecol
  3314. ; addq #1,d6
  3315. ; sub.w d3,d2
  3316. ; bge.s .makecol
  3317. ;.nocol
  3318. ; add.w d3,d2
  3319.  
  3320.  move.w d3,d4
  3321.  move.w d3,d5
  3322.  subq #1,d5
  3323.  move.w d6,d1
  3324.  addq #1,d1
  3325.  
  3326. .pixlopleft:
  3327.  move.w d0,(a3)+
  3328.  sub.w d2,d4
  3329.  bge.s .nobigstepl
  3330.  sub.w d1,d0
  3331.  add.w d3,d4
  3332.  dbra d5,.pixlopleft
  3333.  bra lineflat
  3334.  
  3335. .nobigstepl
  3336.  sub.w d6,d0
  3337.  dbra d5,.pixlopleft
  3338.  
  3339. lineflat:
  3340.  
  3341. bothbehind:
  3342.  dbra d7,sideloop
  3343.  
  3344. pastsides:
  3345.  
  3346.  
  3347.  addq #2,a0
  3348.  
  3349.  move.w #104*4,linedir
  3350.  move.l frompt,a6
  3351.  add.l #104*4*41,a6
  3352.  move.w (a0)+,scaleval
  3353.  move.w (a0)+,whichtile
  3354.  move.w (a0)+,d6
  3355.  add.w ZoneBright,d6
  3356.  move.w d6,lighttype
  3357.  move.w above(pc),d6
  3358.  beq groundfloor
  3359. * on ceiling:
  3360.  move.w #-104*4,linedir
  3361.  suba.w #104*4,a6
  3362. groundfloor:
  3363.  
  3364.  move.w xoff,d6
  3365.  move.w zoff,d7
  3366.  add.w xwobxoff,d7
  3367.  add.w xwobzoff,d6
  3368.  move.w scaleval(pc),d3
  3369.  beq.s .samescale
  3370.  bgt.s .scaledown
  3371.  neg.w d3
  3372.  asr.l d3,d7
  3373.  asr.l d3,d6
  3374.  bra.s .samescale
  3375. .scaledown:
  3376.  asl.l d3,d6
  3377.  asl.l d3,d7
  3378. .samescale
  3379.  asl.w #8,d7
  3380.  move.w d6,sxoff
  3381.  move.w d7,szoff
  3382.  bra pastscale 
  3383.  
  3384.  asr.l #3,d1
  3385.  asr.l #3,d2
  3386.  asr.l #2,d1
  3387.  asr.l #2,d2
  3388.  asr.l #1,d1
  3389.  asr.l #1,d2
  3390. scaleprogfrom
  3391.  nop
  3392.  nop
  3393.  asl.l #1,d1
  3394.  asl.l #1,d2
  3395.  asl.l #2,d1
  3396.  asl.l #2,d2
  3397.  asl.l #3,d1
  3398.  asl.l #3,d2
  3399.  
  3400. top: dc.w 0
  3401. bottom: dc.w 0
  3402. ypos: dc.l 0
  3403. nfloors: dc.w 0
  3404. lighttype: dc.w 0
  3405. above: dc.w 0 
  3406. linedir: dc.w 0
  3407. distaddr: dc.w 0
  3408.  
  3409. minz: dc.w 0
  3410. leftsidetab:
  3411.  ds.w 80
  3412. rightsidetab:
  3413.  ds.w 80
  3414. leftsideclip:
  3415.  ds.w 80
  3416. rightsideclip:
  3417.  ds.w 80
  3418.  
  3419. movespd: dc.w 0
  3420. largespd: dc.l 0
  3421.  
  3422. pastscale:
  3423.  
  3424.  tst.b drawit(pc)
  3425.  beq dontdrawfloor
  3426.  
  3427.  move.l a0,-(a7)
  3428.  
  3429.  move.l #leftsidetab,a4
  3430.  move.w top(pc),d1
  3431.  move.w bottom(pc),d7
  3432.  tst.w above
  3433.  beq.s clipfloor
  3434.  
  3435.  move.w #40,d3
  3436.  move.w d3,d4
  3437.  sub.w topclip,d3
  3438.  sub.w botclip,d4
  3439.  cmp.w d3,d1
  3440.  bge predontdrawfloor
  3441.  cmp.w d4,d7
  3442.  blt predontdrawfloor
  3443.  cmp.w d4,d1
  3444.  bge.s .nocliptoproof
  3445.  move.w d4,d1
  3446. .nocliptoproof
  3447.  cmp.w d3,d7
  3448.  blt doneclip
  3449.  move.w d3,d7
  3450.  bra doneclip
  3451.  
  3452. clipfloor:
  3453.  move.w botclip,d4
  3454.  sub.w #40,d4
  3455.  cmp.w d4,d1
  3456.  bge predontdrawfloor
  3457.  move.w topclip,d3
  3458.  sub.w #40,d3
  3459.  cmp.w d3,d1
  3460.  bge.s .nocliptopfloor
  3461.  move.w d3,d1
  3462. .nocliptopfloor 
  3463.  cmp.w d3,d7
  3464.  ble predontdrawfloor
  3465.  cmp.w d4,d7
  3466.  blt.s .noclipbotfloor
  3467.  move.w d4,d7
  3468. .noclipbotfloor:
  3469.  
  3470. doneclip:
  3471.  
  3472.  lea (a4,d1*2),a4
  3473. ; move.l #dists,a2
  3474.  move.w distaddr,d0
  3475.  muls #64,d0
  3476.  move.l d0,a2
  3477. ; muls #25,d0
  3478. ; adda.w d0,a2
  3479. ; lea (a2,d1*2),a2
  3480.  sub.w d1,d7
  3481.  ble predontdrawfloor 
  3482.  move.w d1,d0
  3483.  bne.s .notzero
  3484.  moveq #1,d0
  3485. .notzero
  3486.  muls linedir,d1
  3487.  add.l d1,a6
  3488.  move.l #floorscalecols,a1
  3489.  move.l LineToUse,a5
  3490.  
  3491.  tst.b anyclipping
  3492.  beq dofloornoclip
  3493.  
  3494. dofloor:
  3495. ; move.w (a2)+,d0
  3496.  move.w leftclip(pc),d3
  3497.  move.w rightclip(pc),d4
  3498.  move.w rightsidetab-leftsidetab(a4),d2
  3499.  addq #1,d2
  3500.  cmp.w d3,d2
  3501.  ble.s nodrawline
  3502.  cmp.w d4,d2
  3503.  ble.s noclipright
  3504.  move.w d4,d2
  3505. noclipright:
  3506.  move.w (a4),d1
  3507.  cmp.w d4,d1
  3508.  bge.s nodrawline
  3509.  cmp.w d3,d1
  3510.  bge.s noclipleft
  3511.  move.w d3,d1
  3512. noclipleft:
  3513.  cmp.w d1,d2
  3514.  ble.s nodrawline
  3515.  
  3516.  move.w d1,leftedge
  3517.  move.w d2,rightedge
  3518.  
  3519.  move.l a6,a3
  3520.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  3521.  move.l a2,d7
  3522.  divs d0,d7
  3523.  move.w d7,d0
  3524.  jsr (a5)
  3525.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  3526. nodrawline
  3527.  adda.w linedir(pc),a6
  3528.  addq #2,a4
  3529.  addq #1,d0
  3530.  subq #1,d7
  3531.  bgt dofloor
  3532.  
  3533. predontdrawfloor
  3534.  move.l (a7)+,a0
  3535.  
  3536. dontdrawfloor:
  3537.  
  3538.  CACHE_FREEZE_OFF d2
  3539.  rts
  3540.  
  3541. anyclipping: dc.w 0
  3542.  
  3543. dofloornoclip:
  3544. ; move.w (a2)+,d0
  3545.  move.w rightsidetab-leftsidetab(a4),d2
  3546.  addq #1,d2
  3547.  move.w (a4)+,leftedge
  3548.  move.w d2,rightedge
  3549.  
  3550.  move.l a6,a3
  3551.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  3552.  move.l a2,d7
  3553.  divs d0,d7
  3554.  move.w d7,d0
  3555.  jsr (a5)
  3556.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  3557.  adda.w linedir(pc),a6
  3558.  addq #1,d0
  3559.  subq #1,d7
  3560.  bgt dofloornoclip
  3561.  
  3562.  bra predontdrawfloor
  3563.  
  3564.  
  3565. dists:
  3566. ; incbin "floordists"
  3567. drawit: dc.w 0
  3568.  
  3569. LineToUse: dc.l 0
  3570.  
  3571. ***************************
  3572. * Right then, time for the floor
  3573. * routine...
  3574. * For test purposes, give it
  3575. * a3 = point to screen
  3576. * d0= z distance away
  3577. * and sinval+cosval must be set up.
  3578. ***************************
  3579.  
  3580. leftedge: dc.w 0
  3581. rightedge: dc.w 0
  3582.  
  3583. rndpt: dc.l rndtab
  3584.  
  3585. WaterFloorLine:
  3586.  
  3587.  CACHE_OFF d2
  3588.  
  3589.  move.l rndpt,a2
  3590.  move.w (a2)+,d1
  3591.  move.w (a2)+,d2
  3592.  move.w (a2)+,d3
  3593.  cmp.l #endrnd-4,a2
  3594.  blt.s okrnd
  3595.  suba.w #98,a2
  3596. okrnd: 
  3597.  move.l a2,rndpt
  3598.  
  3599.  asr.w #6,d0
  3600.  move.w d0,d1
  3601.  move.w d0,d2
  3602.  move.w d0,d3
  3603.  move.l clipd(pc,d1.w*4),d1
  3604.  move.l clipd(pc,d2.w*4),d2
  3605.  move.l clipd(pc,d3.w*4),d3
  3606.  bra pcli
  3607.  
  3608.  dc.l 0
  3609. clipd:
  3610.  dc.l 0
  3611.  dc.l 512
  3612.  dc.l 512*2
  3613.  dc.l 512*3
  3614.  dc.l 512*4
  3615.  dc.l 512*5
  3616.  dc.l 512*6
  3617.  dc.l 512*7
  3618.  dc.l 512*8
  3619.  dc.l 512*9
  3620.  dc.l 512*10
  3621.  dc.l 512*11
  3622.  dc.l 512*12
  3623.  dc.l 512*13
  3624.  dc.l 512*14
  3625.  dc.l 512*15
  3626.  dc.l 512*15
  3627.  dc.l 512*15
  3628.  dc.l 512*15
  3629.  dc.l 512*15
  3630.  dc.l 512*15
  3631.  dc.l 512*15
  3632.  dc.l 512*15
  3633.  dc.l 512*15
  3634.  dc.l 512*15
  3635.  dc.l 512*15
  3636.  dc.l 512*15
  3637.  
  3638. pcli:
  3639.  
  3640.  move.l #brightentab,a2
  3641.  move.l a2,a4
  3642.  move.l a4,a5
  3643.  add.l d1,a2
  3644.  add.l d2,a4
  3645.  add.l d3,a5
  3646.  
  3647.  move.l #doacrossline,a1
  3648.  move.w leftedge(pc),d1
  3649.  move.w rightedge(pc),d2
  3650.  sub.w d1,d2
  3651.  move.w time(pc,d1.w*2),d1
  3652.  move.w time(pc,d2.w*2),d2
  3653.  lea (a1,d1.w),a1
  3654.  move.w (a1,d2.w),d4
  3655.  move.w #$4e75,(a1,d2.w)
  3656.  
  3657.  moveq #0,d0
  3658.  jsr (a1)
  3659.  move.w d4,(a1,d2.w)
  3660.  
  3661.  CACHE_ON d2
  3662.  
  3663.  rts
  3664.  
  3665. time:
  3666. val SET 0
  3667.  REPT 100
  3668.  dc.w val
  3669. val SET val+10
  3670.  ENDR
  3671.  
  3672. storeit: dc.l 0
  3673.  
  3674. doacrossline:
  3675.  incbin "Doacrossline"
  3676.  rts
  3677.  
  3678. dst: dc.w 0
  3679.  
  3680. FloorLine:
  3681.  
  3682.  move.l #floortile,a0
  3683.  adda.w whichtile,a0
  3684.  move.w lighttype,d1
  3685.  
  3686.  move.w d0,dst
  3687.  
  3688.  move.w d0,d2
  3689. *********************
  3690. * Old version
  3691.  asr.w #6,d2
  3692.  add.w #5,d1
  3693. *********************
  3694. ; asr.w #3,d2
  3695. ; sub.w #4,d2
  3696. ; cmp.w #6,d2
  3697. ; blt.s flbrbr
  3698. ; move.w #6,d2
  3699. ;flbrbr:
  3700. *********************
  3701.  add.w d2,d1
  3702.  bge.s .fixedbright
  3703.  moveq #0,d1
  3704. .fixedbright:
  3705.  cmp.w #28,d1
  3706.  ble.s .smallbright
  3707.  move.w #28,d1
  3708. .smallbright:
  3709.  lea floorscalecols,a1
  3710.  add.l floorbright(pc,d1.w*4),a1
  3711.  bra pastfloorbright
  3712.  
  3713. ConstCol: dc.w 0
  3714.  
  3715. BumpLine:
  3716.  
  3717.  tst.b smoothbumps
  3718.  beq.s Chunky
  3719.  
  3720.  move.l #SmoothTile,a0
  3721.  lea Smoothscalecols,a1
  3722.  bra pastast
  3723.  
  3724. Chunky:
  3725.  
  3726.  moveq #0,d2
  3727.  move.l #Bumptile,a0
  3728.  move.w whichtile,d2
  3729.  adda.w d2,a0
  3730.  ror.l #2,d2
  3731.  lsr.w #6,d2
  3732.  rol.l #2,d2
  3733.  and.w #15,d2
  3734.  move.l #ConstCols,a1
  3735.  move.w (a1,d2.w*2),ConstCol
  3736.  lea Bumpscalecols,a1
  3737.  
  3738. pastast:
  3739.  move.w lighttype,d1
  3740.  
  3741.  move.w d0,dst
  3742.  
  3743.  move.w d0,d2
  3744. *********************
  3745. * Old version
  3746.  asr.w #6,d2
  3747.  add.w #5,d1
  3748. *********************
  3749. ; asr.w #3,d2
  3750. ; sub.w #4,d2
  3751. ; cmp.w #6,d2
  3752. ; blt.s flbrbr
  3753. ; move.w #6,d2
  3754. ;flbrbr:
  3755. *********************
  3756.  add.w d2,d1
  3757.  bge.s .fixedbright
  3758.  moveq #0,d1
  3759. .fixedbright:
  3760.  cmp.w #28,d1
  3761.  ble.s .smallbright
  3762.  move.w #28,d1
  3763. .smallbright:
  3764.  add.l floorbright(pc,d1.w*4),a1
  3765.  bra pastfloorbright
  3766.  
  3767.  
  3768. floorbright:
  3769.  dc.l 512*0
  3770.  dc.l 512*1
  3771.  dc.l 512*1
  3772.  dc.l 512*2
  3773.  dc.l 512*2
  3774.  
  3775.  dc.l 512*3
  3776.  dc.l 512*3
  3777.  dc.l 512*4
  3778.  dc.l 512*4
  3779.  dc.l 512*5
  3780.  
  3781.  dc.l 512*5
  3782.  dc.l 512*6
  3783.  dc.l 512*6
  3784.  dc.l 512*7
  3785.  dc.l 512*7
  3786.  
  3787.  dc.l 512*8
  3788.  dc.l 512*8
  3789.  dc.l 512*9
  3790.  dc.l 512*9
  3791.  dc.l 512*10
  3792.  
  3793.  dc.l 512*10
  3794.  dc.l 512*11
  3795.  dc.l 512*11
  3796.  dc.l 512*12
  3797.  dc.l 512*12
  3798.  
  3799.  dc.l 512*13
  3800.  dc.l 512*13
  3801.  dc.l 512*14
  3802.  dc.l 512*14
  3803.  
  3804. widthleft: dc.w 0
  3805. scaleval: dc.w 0
  3806. sxoff: dc.w 0
  3807. szoff: dc.w 0
  3808. xoff34: dc.w 0
  3809. zoff34: dc.w 0
  3810. scosval: dc.w 0
  3811. ssinval: dc.w 0
  3812.  
  3813.  
  3814. floorsetbright:
  3815.  move.l #walltiles,a0
  3816.  
  3817. pastfloorbright
  3818.  
  3819.  
  3820.  move.w d0,d1
  3821.  muls cosval,d1    ; change in x across whole width
  3822.  move.w d0,d2
  3823.  muls sinval,d2    ; change in z across whole width
  3824.  neg.l d2
  3825. scaleprog:
  3826.  move.w scaleval(pc),d3
  3827.  beq.s .samescale
  3828.  bgt.s .scaledown
  3829.  neg.w d3
  3830.  asr.l d3,d1
  3831.  asr.l d3,d2
  3832.  bra.s .samescale
  3833. .scaledown:
  3834.  asl.l d3,d1
  3835.  asl.l d3,d2
  3836. .samescale
  3837.  
  3838.  move.l d1,d3 ;    z cos
  3839.  move.l d3,d6
  3840.  move.l d3,d5
  3841.  asr.l #1,d6
  3842.  add.l d6,d3
  3843.  asr.l #1,d3
  3844.  
  3845.  move.l d2,d4    ; z sin
  3846.  move.l d4,d6
  3847.  asr.l #1,d6
  3848.  add.l d4,d6
  3849.  add.l d3,d4
  3850.  neg.l d4    ; start x
  3851.  
  3852.  asr.l #1,d6    ; zsin/2
  3853.  sub.l d6,d5    ; start z
  3854.  
  3855.  move.w d4,startsmoothx
  3856.  move.w d5,startsmoothz
  3857.  
  3858.  swap d4
  3859.  asr.l #8,d5
  3860.  add.w szoff,d5
  3861.  add.w sxoff,d4
  3862.  and.w #63,d4
  3863.  and.w #63*256,d5
  3864.  move.b d4,d5
  3865.  
  3866.  asr.l #6,d1
  3867.  asr.l #6,d2
  3868.  move.w leftedge(pc),d6
  3869.  beq.s nomultleft
  3870.  
  3871.  move.l d1,d3
  3872.  asr.l #6,d3
  3873.  muls d6,d3
  3874.  asl.l #6,d3
  3875.  swap d3
  3876.  add.b d3,d5
  3877.  
  3878.  move.l d2,d3
  3879.  asr.l #6,d3
  3880.  muls d6,d3
  3881.  asl.l #6,d3
  3882.  swap d3
  3883.  lsl.w #8,d3
  3884.  add.w d3,d5
  3885.  
  3886. nomultleft:
  3887.  
  3888.  move.w d1,a4
  3889.  move.w d2,a5
  3890.  asr.l #8,d2
  3891.  and.w #%0011111100000000,d2
  3892.  swap d1
  3893.  add.w d1,d2
  3894.  move.w #%11111100111111,d1
  3895.  and.w d1,d5
  3896.  swap d5
  3897.  move.w startsmoothz,d5
  3898.  swap d5
  3899.  swap d2
  3900.  move.w a5,d2
  3901.  swap d2
  3902.  
  3903. ***********************************
  3904.  
  3905.  move.w d6,a2
  3906.  move.l d2,d6
  3907.  add.w #256,d6
  3908.  
  3909.  moveq #0,d0
  3910.  
  3911.  tst.w a2
  3912.  beq startatleftedge
  3913.  
  3914.  move.w widthleft(pc),d4
  3915.  
  3916.  move.w rightedge(pc),d3
  3917.  
  3918.  cmp.w #31,a2
  3919.  bgt.s notinfirststrip
  3920.  lea (a3,a2.w*4),a3
  3921.  cmp.w #32,d3
  3922.  ble.s allinfirststrip
  3923.  move.w #32,d7
  3924.  sub.w d7,d3
  3925.  sub.w a2,d7
  3926.  bra intofirststrip
  3927.  
  3928. allinfirststrip
  3929.  sub.w a2,d3
  3930.  move.w d3,d7
  3931.  move.w #0,d4
  3932.  bra allintofirst
  3933.  
  3934. notinfirststrip:
  3935.  sub.w #32,a2
  3936.  sub.w #32,d3
  3937.  adda.w #33*4,a3
  3938.  cmp.w #31,a2
  3939.  bgt.s notstartinsec
  3940.  lea (a3,a2.w*4),a3
  3941.  cmp.w #32,d3
  3942.  ble.s allinsecstrip
  3943.  move.w #32,d7
  3944.  sub.w d7,d3
  3945.  sub.w a2,d7
  3946.  move.w d3,d4
  3947.  bra tstwat
  3948.  
  3949. allinsecstrip
  3950.  sub.w a2,d3
  3951.  move.w d3,d7
  3952.  move.w #0,d4
  3953.  bra tstwat
  3954.  rts
  3955.  
  3956. prot8: dc.w 0
  3957.  
  3958. notstartinsec:
  3959.  sub.w #32,a2
  3960.  sub.w #32,d3
  3961.  adda.w #33*4,a3
  3962.  lea (a3,a2.w*4),a3
  3963.  cmp.w #32,d3
  3964.  ble.s allinthirdstrip
  3965.  move.w #32,d7
  3966.  sub.w d7,d3
  3967.  sub.w a2,d7
  3968.  move.w d3,d4
  3969.  bra tstwat
  3970.  rts
  3971.  
  3972. allinthirdstrip
  3973.  sub.w a2,d3
  3974.  move.w d3,d7
  3975.  move.w #0,d4
  3976.  bra tstwat
  3977.  rts
  3978.  
  3979. startatleftedge:
  3980.  
  3981.  move.w rightedge(pc),d3
  3982.  sub.w a2,d3
  3983.  
  3984.  move.w d3,d7
  3985.  cmp.w #32,d7
  3986.  ble.s .notoowide
  3987.  move.w #32,d7
  3988. .notoowide:
  3989.  sub.w d7,d3
  3990. intofirststrip:
  3991.  
  3992.  move.w d3,d4
  3993. allintofirst:
  3994.  
  3995.  move.w startsmoothx,d3
  3996.  
  3997. tstwat:
  3998.  
  3999.  tst.b usewater
  4000.  bne texturedwater
  4001.  
  4002.  
  4003. ******************************
  4004. * BumpMap the floor/ceiling! *
  4005.  tst.b usebumps
  4006.  bne.s BumpMap
  4007. ******************************
  4008.  
  4009. ordinary:
  4010.  moveq #0,d0
  4011.  
  4012.  dbra d7,acrossscrn
  4013.  rts
  4014.  
  4015. usebumps: dc.w $0
  4016. smoothbumps: dc.w $0
  4017.  
  4018.  include "ab3:source/bumpmap.s"
  4019.  
  4020.  CNOP 0,4
  4021. backbefore:
  4022.  and.w d1,d5
  4023.  move.b (a0,d5.w*4),d0
  4024.  move.w (a1,d0.w*2),(a3)
  4025.  addq #4,a3
  4026.  add.w a4,d3
  4027.  addx.l d6,d5
  4028.  dbcs d7,acrossscrn
  4029.  dbcc d7,backbefore
  4030.  bcc.s past1
  4031.  add.w #256,d5 
  4032.  bra.s past1
  4033.  
  4034. acrossscrn:
  4035.  and.w d1,d5
  4036.  move.b (a0,d5.w*4),d0
  4037.  move.w (a1,d0.w*2),(a3)
  4038.  addq #4,a3
  4039.  add.w a4,d3
  4040.  addx.l d2,d5
  4041.  dbcs d7,acrossscrn
  4042.  dbcc d7,backbefore
  4043.  bcc.s past1
  4044.  add.w #256,d5 
  4045. past1:
  4046.  
  4047.  move.w d4,d7
  4048.  bne.s .notdoneyet
  4049.  CACHE_FREEZE_ON d2
  4050.  rts
  4051. .notdoneyet:
  4052.  
  4053.  cmp.w #32,d7
  4054.  ble.s .notoowide
  4055.  move.w #32,d7
  4056. .notoowide
  4057.  sub.w d7,d4  
  4058.  addq #4,a3
  4059.  
  4060.  dbra d7,acrossscrn
  4061.  CACHE_FREEZE_ON d2
  4062.  rts
  4063.  
  4064. waterpt: dc.l waterlist
  4065.  
  4066. waterlist:
  4067.  dc.l waterfile
  4068.  dc.l waterfile+2
  4069.  dc.l waterfile+256
  4070.  dc.l waterfile+256+2
  4071.  dc.l waterfile+512
  4072.  dc.l waterfile+512+2
  4073.  dc.l waterfile+768
  4074.  dc.l waterfile+768+2
  4075. ; dc.l waterfile+768
  4076. ; dc.l waterfile+512+2
  4077. ; dc.l waterfile+512
  4078. ; dc.l waterfile+256+2
  4079. ; dc.l waterfile+256
  4080. ; dc.l waterfile+2
  4081. endwaterlist:
  4082.  
  4083. watertouse: dc.l waterfile
  4084.  
  4085. wtan: dc.w 0
  4086. wateroff: dc.w 0
  4087.  
  4088. texturedwater:
  4089.  
  4090.  add.w wateroff,d5
  4091.  
  4092.  move.l #brightentab,a1
  4093.  move.w dst,d0
  4094.  clr.b d0
  4095.  add.w d0,d0
  4096.  adda.w d0,a1
  4097.  
  4098.  move.w dst,d0
  4099.  asl.w #7,d0
  4100.  add.w wtan,d0
  4101.  and.w #8191,d0
  4102.  move.l #SineTable,a0
  4103.  move.w (a0,d0.w),d0
  4104.  ext.l d0
  4105.  move.w dst,d3
  4106.  add.w #300,d3
  4107.  divs d3,d0
  4108.  asr.w #6,d0
  4109.  add.w #2,d0
  4110.  
  4111.  move.w dst,d3
  4112.  asr.w #7,d3
  4113.  add.w d3,d0
  4114.  
  4115.  muls #104*4,d0
  4116.  move.w d0,a6
  4117.  
  4118.  move.l watertouse,a0
  4119.  
  4120.  move.w startsmoothx,d3
  4121.  dbra d7,acrossscrnw
  4122.  rts
  4123.  
  4124. backbeforew:
  4125.  and.w d1,d5
  4126.  move.w (a0,d5.w*4),d0
  4127.  move.b 1(a3,a6.w),d0
  4128.  move.w (a1,d0.w*2),(a3)
  4129.  addq #4,a3
  4130.  add.w a4,d3
  4131.  addx.l d6,d5
  4132.  dbcs d7,acrossscrnw
  4133.  dbcc d7,backbeforew
  4134.  bcc.s past1w
  4135.  add.w #256,d5 
  4136.  bra.s past1w
  4137.  
  4138. acrossscrnw:
  4139.  and.w d1,d5
  4140.  move.w (a0,d5.w*4),d0
  4141.  move.b 1(a3,a6.w),d0
  4142.  move.w (a1,d0.w*2),(a3)
  4143.  addq #4,a3
  4144.  add.w a4,d3
  4145.  addx.l d2,d5
  4146.  dbcs d7,acrossscrnw
  4147.  dbcc d7,backbeforew
  4148.  bcc.s past1w
  4149.  add.w #256,d5 
  4150. past1w:
  4151.  
  4152.  move.w d4,d7
  4153.  bne.s .notdoneyet
  4154.  rts
  4155. .notdoneyet:
  4156.  
  4157.  cmp.w #32,d7
  4158.  ble.s .notoowide
  4159.  move.w #32,d7
  4160. .notoowide
  4161.  sub.w d7,d4  
  4162.  addq #4,a3
  4163.  
  4164.  dbra d7,acrossscrnw
  4165.  CACHE_FREEZE_ON d2
  4166.  rts
  4167.  
  4168. usewater: dc.w 0
  4169. startsmoothx: dc.w 0
  4170. startsmoothz: dc.w 0
  4171.  
  4172. ********************************
  4173. *
  4174.  include "AB3:source/ObjDraw3.chipram"
  4175. *
  4176. ********************************
  4177.  
  4178. numframes:
  4179.  dc.w 0
  4180.  
  4181. alframe: dc.l Objects+4096
  4182.  
  4183. alan:
  4184.  dcb.l 4,0
  4185.  dcb.l 4,1
  4186.  dcb.l 4,2
  4187.  dcb.l 4,3
  4188. endalan:
  4189.  
  4190. alanptr: dc.l alan
  4191.  
  4192. Time2: dc.l 0
  4193. dispco:
  4194.  dc.w 0
  4195.  
  4196. KInt_Init    ;VBR Assumed $0
  4197.         move.l $68.w,OLDKINT
  4198.         Move.l    #KInt_Main,$68.w    Install Interrupt 
  4199.         And.b    #$3f,$bfe201        Set Timers
  4200.         Move.b    #$7f,$bfed01
  4201.         Move.b    $bfed01,d0
  4202.         Move.b    #$88,$bfed01
  4203.         St.b    KInt_CCode        
  4204.         Move.b    #$a0,$bfee01        Start Timey Thing
  4205.         Rts                And return
  4206.  
  4207. OLDKINT: dc.l 0
  4208.  
  4209. KInt_Main    
  4210.         Movem.l    d0/d1/a0/a1/a6,-(a7)    Stack everything
  4211.         Move.w    #8,$dff09a        Temp Disable Int.
  4212.         Move.w    $dff01e,d0        Intreqr
  4213.         And.w    #8,d0            Mask Out All X^ K_Int
  4214.     Beq    KInt_End            Not Keyboard Interrupt
  4215.         Lea    $bfed01,a6
  4216.         Move.w    #$8,$dff09c        Clear Int.Request
  4217.         Move.b    -$100(a6),d0        Move Raw Keyboard value
  4218.         Ror.b    #1,d0            Roll to correct
  4219.         Not.b    d0            
  4220.         Move.b    d0,KInt_CCode        Save Corrected Keycode
  4221. .HandShake    Move.b    #8,(a6)
  4222.         Move.b    #7,-$900(a6)
  4223.         Move.b    #0,-$800(a6)
  4224.         Move.b    #0,-$100(a6)
  4225.         Move.b    #$d1,$100(a6)        
  4226.         Tst.b    (a6)    
  4227. .wait        Btst    #0,(a6)
  4228.     Beq.s    .wait
  4229.         Move.b    #$a0,$100(a6)        
  4230.         Move.b    (a6),d0        
  4231.         Move.b    #$88,(a6)
  4232.         Lea    KeyMap,a1
  4233.         Moveq.w    #0,d0
  4234.         Move.b    KInt_CCode(pc),d0
  4235.     Bmi.s    KInt_KeyUp            neg if up 
  4236.  
  4237. KInt_KeyDown
  4238.         st (a1,d0.w)
  4239.     Bra    KInt_End
  4240.  
  4241. KInt_KeyUp
  4242.         And.w    #$7f,d0            Make code Positive
  4243.         clr.b (a1,d0.w)
  4244. KInt_End    Movem.l    (a7)+,d0/d1/a0/a1/a6    Unstack Everything
  4245.     
  4246.         Move.w    #$8008,$dff09a        Re-enable Int.
  4247.         Rte
  4248.  
  4249. KInt_CCode    Ds.b    1
  4250. KInt_Askey    Ds.b    1
  4251. KInt_OCode    Ds.w    1
  4252.  
  4253.  
  4254. PLR1_mouse_control
  4255.  jsr ReadMouse
  4256.  jsr PLR1_alwayskeys
  4257.  move.l #SineTable,a0
  4258.  move.w PLR1s_angspd,d1
  4259.  move.w PLR1s_angpos,d0
  4260.  and.w #8190,d0
  4261.  move.w (a0,d0.w),PLR1s_sinval
  4262.  adda.w #2048,a0
  4263.  move.w (a0,d0.w),PLR1s_cosval
  4264.  
  4265.  move.l PLR1s_xspdval,d6
  4266.  move.l PLR1s_zspdval,d7
  4267.  
  4268.  neg.l d6
  4269.  ble.s .nobug1
  4270.  asr.l #1,d6
  4271.  add.l #1,d6
  4272.  bra.s .bug1
  4273. .nobug1
  4274.  asr.l #1,d6
  4275. .bug1:
  4276.  
  4277.  neg.l d7
  4278.  ble.s .nobug2
  4279.  asr.l #1,d7
  4280.  add.l #1,d7
  4281.  bra.s .bug2
  4282. .nobug2
  4283.  asr.l #1,d7
  4284. .bug2: 
  4285.  
  4286.  
  4287.  move.w ymouse,d3
  4288.  sub.w oldymouse,d3
  4289.  add.w d3,oldymouse
  4290.  asr.w #1,d3
  4291.  cmp.w #50,d3
  4292.  ble.s nofastfor
  4293.  move.w #50,d3
  4294. nofastfor:
  4295.  cmp.w #-50,d3
  4296.  bge.s nofastback
  4297.  move.w #-50,d3
  4298. nofastback:
  4299.  
  4300.  tst.b Ducked
  4301.  beq.s .nohalve
  4302.  asr.w #1,d3
  4303. .nohalve
  4304.  
  4305.  move.w d3,d2
  4306.  asl.w #3,d2
  4307.  move.w d2,d1
  4308.  add.w d2,d1
  4309.  add.w d2,d1
  4310.  add.w Bobble,d1
  4311.  and.w #8190,d1
  4312.  move.w d1,Bobble
  4313.  
  4314.  move.w PLR1s_sinval,d1
  4315.  move.w PLR1s_cosval,d2
  4316.  
  4317.  move.w d2,d4
  4318.  move.w d1,d5
  4319.  muls lrs,d4
  4320.  muls lrs,d5
  4321.  
  4322.  
  4323.  muls d3,d2
  4324.  muls d3,d1
  4325.  sub.l d4,d1
  4326.  add.l d5,d2
  4327.  
  4328.  sub.l d1,d6
  4329.  sub.l d2,d7
  4330.  add.l d6,PLR1s_xspdval
  4331.  add.l d7,PLR1s_zspdval
  4332.  move.l PLR1s_xspdval,d6
  4333.  move.l PLR1s_zspdval,d7
  4334.  add.l d6,PLR1s_xoff
  4335.  add.l d7,PLR1s_zoff
  4336.  
  4337.  tst.b PLR1_fire
  4338.  beq.s .firenotpressed
  4339. ; fire was pressed last time.
  4340.  btst #6,$bfe001
  4341.  bne.s .firenownotpressed
  4342. ; fire is still pressed this time.
  4343.  st PLR1_fire
  4344.  bra .doneplr1
  4345.  
  4346. .firenownotpressed:
  4347. ; fire has been released.
  4348.  clr.b PLR1_fire
  4349.  bra .doneplr1
  4350.  
  4351. .firenotpressed
  4352.  
  4353. ; fire was not pressed last frame...
  4354.  
  4355.  btst #6,$bfe001
  4356. ; if it has still not been pressed, go back above
  4357.  bne.s .firenownotpressed
  4358. ; fire was not pressed last time, and was this time, so has
  4359. ; been clicked.
  4360.  st PLR1_clicked
  4361.  st PLR1_fire
  4362.  
  4363. .doneplr1:
  4364.  move.l PLR1s_tyoff,d0
  4365.  move.l PLR1s_yoff,d1
  4366.  move.l PLR1s_yvel,d2
  4367.  sub.l d1,d0
  4368.  bgt.s .aboveground
  4369.  sub.l #1024,d2
  4370.  blt.s .notfast
  4371.  sub.l #2048,d2
  4372. .notfast:
  4373.  add.l d2,d1
  4374.  sub.l d2,d0
  4375.  blt.s .pastitall
  4376.  move.l #0,d2
  4377.  add.l d0,d1
  4378.  bra.s .pastitall
  4379.  
  4380. .aboveground:
  4381.  add.l d2,d1
  4382.  add.l #1024,d2
  4383. .pastitall:
  4384.  
  4385.  move.l d2,PLR1s_yvel
  4386.  move.l d1,PLR1s_yoff
  4387.  
  4388.  rts
  4389.  
  4390. PLR1_follow_path:
  4391.  
  4392.  move.l pathpt,a0
  4393.  move.w (a0),d1
  4394.  move.w d1,PLR1s_xoff
  4395.  move.w 2(a0),d1
  4396.  move.w d1,PLR1s_zoff
  4397.  move.w 4(a0),d0
  4398.  add.w d0,d0
  4399.  and.w #8190,d0
  4400.  move.w d0,PLR1_angpos
  4401.  
  4402.  move.w TempFrames,d0
  4403.  asl.w #3,d0
  4404.  adda.w d0,a0
  4405.  
  4406.  cmp.l #endpath,a0
  4407.  blt notrestartpath
  4408.  move.l #Path,a0
  4409. notrestartpath:
  4410.  move.l a0,pathpt
  4411.  
  4412.  rts
  4413.  
  4414. OldSpace: dc.b 0
  4415. SpaceTapped: dc.b 0
  4416. SPCTAP: dc.b 0
  4417. Ducked: dc.b 0
  4418.  even
  4419.  
  4420. PLR1_alwayskeys
  4421.  move.l #KeyMap,a5
  4422.  move.b $40(a5),d1
  4423.  beq.s nottapped
  4424.  tst.b OldSpace
  4425.  bne.s nottapped
  4426.  st SpaceTapped
  4427. nottapped:
  4428.  move.b d1,OldSpace
  4429.  
  4430.  tst.b $22(a5)
  4431.  beq.s notduck
  4432.  clr.b $22(a5)
  4433.  move.l #playerheight,PLR1s_targheight
  4434.  not.b Ducked
  4435.  beq.s notduck
  4436.  move.l #playercrouched,PLR1s_targheight
  4437. notduck:
  4438.  
  4439.  move.l PLR1_Roompt,a4
  4440.  move.l ToZoneFloor(a4),d0
  4441.  sub.l ToZoneRoof(a4),d0
  4442.  tst.b PLR1_StoodInTop
  4443.  beq.s usebottom
  4444.  move.l ToUpperFloor(a4),d0
  4445.  sub.l ToUpperRoof(a4),d0
  4446. usebottom:
  4447.  
  4448.  cmp.l #playerheight+3*1024,d0
  4449.  bgt.s oktostand
  4450.  st Ducked
  4451.  move.l #playercrouched,PLR1s_targheight
  4452. oktostand:
  4453.  
  4454.  move.l PLR1s_height,d0
  4455.  move.l PLR1s_targheight,d1
  4456.  cmp.l d1,d0
  4457.  beq.s noupordown
  4458.  bgt.s crouch
  4459.  add.l #1024,d0
  4460.  bra noupordown
  4461. crouch:
  4462.  sub.l #1024,d0
  4463. noupordown:
  4464.  move.l d0,PLR1s_height
  4465.  
  4466.  tst.b $27(a5)
  4467.  beq.s notselkey
  4468.  st PLR1KEYS
  4469.  clr.b PLR1PATH
  4470.  clr.b PLR1MOUSE
  4471.  clr.b PLR1JOY
  4472. notselkey:
  4473.  
  4474.  tst.b $26(a5)
  4475.  beq.s notseljoy
  4476.  clr.b PLR1KEYS
  4477.  clr.b PLR1PATH
  4478.  clr.b PLR1MOUSE
  4479.  st PLR1JOY
  4480. notseljoy:
  4481.  
  4482.  tst.b $37(a5)
  4483.  beq.s notselmouse
  4484.  clr.b PLR1KEYS
  4485.  clr.b PLR1PATH
  4486.  st PLR1MOUSE
  4487.  clr.b PLR1JOY
  4488. notselmouse:
  4489.  
  4490.  lea 1(a5),a4
  4491.  lea GunData,a3
  4492.  moveq #0,d0
  4493.  move.w #4,d1
  4494. pickweap
  4495.  tst.b (a4)+
  4496.  beq.s notgotweap
  4497.  tst.b 7(a3)
  4498.  beq.s notgotweap
  4499.  move.b d0,GunSelected
  4500. notgotweap
  4501.  addq #1,d0
  4502.  adda.w #16,a3
  4503.  dbra d1,pickweap
  4504.  
  4505.  rts
  4506.  
  4507. PLR1_keyboard_control:
  4508.  
  4509.  move.l #SineTable,a0
  4510.  
  4511.  jsr PLR1_alwayskeys
  4512.  move.l #KeyMap,a5
  4513.  
  4514.  move.w PLR1s_angpos,d0
  4515.  move.w #70,d1
  4516.  move.w #7,d2
  4517.  tst.b $61(a5)
  4518.  beq.s nofaster
  4519.  move.w #120,d1
  4520.  move.w #10,d2
  4521. nofaster:
  4522.  tst.b Ducked
  4523.  beq.s .nohalve
  4524.  asr.w #1,d2
  4525. .nohalve
  4526.  
  4527.  moveq #0,d4 
  4528. ; tst.b $67(a5)
  4529. ; bne.s slidelr
  4530.  
  4531.  tst.b $4f(a5)
  4532.  beq.s noleftturn
  4533.  sub.w d1,d0
  4534. noleftturn
  4535.  move.l #KeyMap,a5
  4536.  tst.b $4e(a5)
  4537.  beq.s norightturn
  4538.  add.w d1,d0
  4539. norightturn
  4540. ; bra.s noslide
  4541.  
  4542. slidelr:
  4543.  tst.b $39(a5)
  4544.  beq.s noleftslide
  4545.  move.w d2,d4
  4546.  asr.w #1,d4
  4547. noleftslide
  4548.  move.l #KeyMap,a5
  4549.  tst.b $3a(a5)
  4550.  beq.s norightslide
  4551.  sub.w d2,d4
  4552.  asr.w #1,d4
  4553. norightslide
  4554.   
  4555. noslide:
  4556.   
  4557.  and.w #8191,d0
  4558.  move.w d0,PLR1s_angpos
  4559.  
  4560.  move.w (a0,d0.w),PLR1s_sinval
  4561.  adda.w #2048,a0
  4562.  move.w (a0,d0.w),PLR1s_cosval
  4563.  
  4564.  move.l PLR1s_xspdval,d6
  4565.  move.l PLR1s_zspdval,d7
  4566.  
  4567.  neg.l d6
  4568.  ble.s .nobug1
  4569.  asr.l #1,d6
  4570.  add.l #1,d6
  4571.  bra.s .bug1
  4572. .nobug1
  4573.  asr.l #1,d6
  4574. .bug1:
  4575.  
  4576.  neg.l d7
  4577.  ble.s .nobug2
  4578.  asr.l #1,d7
  4579.  add.l #1,d7
  4580.  bra.s .bug2
  4581. .nobug2
  4582.  asr.l #1,d7
  4583. .bug2: 
  4584.  
  4585.  moveq #0,d3
  4586.  
  4587.  tst.b $4c(a5)
  4588.  beq.s noforward
  4589.  neg.w d2
  4590.  move.w d2,d3
  4591.  
  4592. noforward:
  4593.  tst.b $4d(a5)
  4594.  beq.s nobackward
  4595.  move.w d2,d3
  4596. nobackward:
  4597.  
  4598.  move.w d3,d2
  4599.  asl.w #3,d2
  4600.  move.w d2,d1
  4601.  add.w d2,d1
  4602.  add.w d2,d1
  4603.  add.w Bobble,d1
  4604.  and.w #8190,d1
  4605.  move.w d1,Bobble
  4606.  
  4607.  move.w PLR1s_sinval,d1
  4608.  muls d3,d1
  4609.  move.w PLR1s_cosval,d2
  4610.  muls d3,d2
  4611.  
  4612.  sub.l d1,d6
  4613.  sub.l d2,d7
  4614.  move.w PLR1s_sinval,d1
  4615.  muls d4,d1
  4616.  move.w PLR1s_cosval,d2
  4617.  muls d4,d2
  4618.  sub.l d2,d6
  4619.  add.l d1,d7
  4620.  
  4621.  add.l d6,PLR1s_xspdval
  4622.  add.l d7,PLR1s_zspdval
  4623.  move.l PLR1s_xspdval,d6
  4624.  move.l PLR1s_zspdval,d7
  4625.  add.l d6,PLR1s_xoff
  4626.  add.l d7,PLR1s_zoff
  4627.  
  4628.  tst.b PLR1_fire
  4629.  beq.s .firenotpressed
  4630. ; fire was pressed last time.
  4631.  tst.b $65(a5)
  4632.  beq.s .firenownotpressed
  4633. ; fire is still pressed this time.
  4634.  st PLR1_fire
  4635.  bra .doneplr1
  4636.  
  4637. .firenownotpressed:
  4638. ; fire has been released.
  4639.  clr.b PLR1_fire
  4640.  bra .doneplr1
  4641.  
  4642. .firenotpressed
  4643.  
  4644. ; fire was not pressed last frame...
  4645.  
  4646.  tst.b $65(a5)
  4647. ; if it has still not been pressed, go back above
  4648.  beq.s .firenownotpressed
  4649. ; fire was not pressed last time, and was this time, so has
  4650. ; been clicked.
  4651.  st PLR1_clicked
  4652.  st PLR1_fire
  4653.  
  4654. .doneplr1:
  4655.  
  4656.  move.l PLR1s_tyoff,d0
  4657.  move.l PLR1s_yoff,d1
  4658.  move.l PLR1s_yvel,d2
  4659.  sub.l d1,d0
  4660.  bgt.s .aboveground
  4661.  sub.l #512,d2
  4662.  blt.s .notfast
  4663.  move.l #0,d2
  4664. .notfast:
  4665.  add.l d2,d1
  4666.  sub.l d2,d0
  4667.  blt.s .pastitall
  4668.  move.l #0,d2
  4669.  add.l d0,d1
  4670.  bra.s .pastitall
  4671.  
  4672. .aboveground:
  4673.  add.l d2,d1
  4674.  add.l #1024,d2
  4675. .pastitall:
  4676.  
  4677.  move.l d2,PLR1s_yvel
  4678.  move.l d1,PLR1s_yoff
  4679.  
  4680.  rts
  4681. passspace:
  4682.  ds.l 400 
  4683.  
  4684. PLR1_JoyStick_control:
  4685.  
  4686.  move.l #KeyMap,a5
  4687.  move.l #SineTable,a0
  4688.  
  4689.  btst #1,$dff00c
  4690.  sne d0
  4691.  btst #1,$dff00d
  4692.  sne d1
  4693.  btst #0,$dff00c
  4694.  sne d2
  4695.  btst #0,$dff00d
  4696.  sne d3
  4697.  btst #7,$bfe001
  4698.  seq $65(a5)
  4699.  
  4700.  move.b d0,$4f(a5)
  4701.  move.b d1,$4e(a5)
  4702.  eor.b d0,d2
  4703.  move.b d2,$4c(a5)
  4704.  eor.b d1,d3
  4705.  move.b d3,$4d(a5)
  4706.  
  4707.  jsr PLR1_alwayskeys
  4708.  
  4709.  move.w PLR1s_angpos,d0
  4710.  move.w #70,d1
  4711.  move.w #7,d2
  4712.  tst.b $61(a5)
  4713.  beq.s .nofaster
  4714.  move.w #120,d1
  4715.  move.w #10,d2
  4716. .nofaster:
  4717.  
  4718.  tst.b Ducked
  4719.  beq.s .nohalve
  4720.  asr.w #1,d2
  4721. .nohalve:
  4722.  
  4723.  moveq #0,d4 
  4724. ; tst.b $67(a5)
  4725. ; bne.s slidelr
  4726.  
  4727.  tst.b $4f(a5)
  4728.  beq.s .noleftturn
  4729.  sub.w d1,d0
  4730. .noleftturn
  4731.  move.l #KeyMap,a5
  4732.  tst.b $4e(a5)
  4733.  beq.s .norightturn
  4734.  add.w d1,d0
  4735. .norightturn
  4736. ; bra.s noslide
  4737.  
  4738. .slidelr:
  4739.  tst.b $39(a5)
  4740.  beq.s .noleftslide
  4741.  move.w d2,d4
  4742.  asr.w #1,d4
  4743. .noleftslide
  4744.  move.l #KeyMap,a5
  4745.  tst.b $3a(a5)
  4746.  beq.s .norightslide
  4747.  sub.w d2,d4
  4748.  asr.w #1,d4
  4749. .norightslide
  4750.   
  4751. .noslide:
  4752.   
  4753.  and.w #8191,d0
  4754.  move.w d0,PLR1s_angpos
  4755.  
  4756.  move.w (a0,d0.w),PLR1s_sinval
  4757.  adda.w #2048,a0
  4758.  move.w (a0,d0.w),PLR1s_cosval
  4759.  
  4760.  move.l PLR1s_xspdval,d6
  4761.  move.l PLR1s_zspdval,d7
  4762.  
  4763.  neg.l d6
  4764.  ble.s .nobug1
  4765.  asr.l #1,d6
  4766.  add.l #1,d6
  4767.  bra.s .bug1
  4768. .nobug1
  4769.  asr.l #1,d6
  4770. .bug1:
  4771.  
  4772.  neg.l d7
  4773.  ble.s .nobug2
  4774.  asr.l #1,d7
  4775.  add.l #1,d7
  4776.  bra.s .bug2
  4777. .nobug2
  4778.  asr.l #1,d7
  4779. .bug2: 
  4780.  
  4781.  moveq #0,d3
  4782.  
  4783.  tst.b $4c(a5)
  4784.  beq.s .noforward
  4785.  neg.w d2
  4786.  move.w d2,d3
  4787. .noforward:
  4788.  tst.b $4d(a5)
  4789.  beq.s .nobackward
  4790.  move.w d2,d3
  4791. .nobackward:
  4792.  
  4793.  move.w d3,d2
  4794.  asl.w #3,d2
  4795.  move.w d2,d1
  4796.  add.w d2,d1
  4797.  add.w d2,d1
  4798.  add.w Bobble,d1
  4799.  and.w #8190,d1
  4800.  move.w d1,Bobble
  4801.  
  4802.  move.w PLR1s_sinval,d1
  4803.  muls d3,d1
  4804.  move.w PLR1s_cosval,d2
  4805.  muls d3,d2
  4806.  
  4807.  sub.l d1,d6
  4808.  sub.l d2,d7
  4809.  move.w PLR1s_sinval,d1
  4810.  muls d4,d1
  4811.  move.w PLR1s_cosval,d2
  4812.  muls d4,d2
  4813.  sub.l d2,d6
  4814.  add.l d1,d7
  4815.  
  4816.  add.l d6,PLR1s_xspdval
  4817.  add.l d7,PLR1s_zspdval
  4818.  move.l PLR1s_xspdval,d6
  4819.  move.l PLR1s_zspdval,d7
  4820.  add.l d6,PLR1s_xoff
  4821.  add.l d7,PLR1s_zoff
  4822.  
  4823.  tst.b PLR1_fire
  4824.  beq.s .firenotpressed
  4825. ; fire was pressed last time.
  4826.  tst.b $65(a5)
  4827.  beq.s .firenownotpressed
  4828. ; fire is still pressed this time.
  4829.  st PLR1_fire
  4830.  bra .doneplr1
  4831.  
  4832. .firenownotpressed:
  4833. ; fire has been released.
  4834.  clr.b PLR1_fire
  4835.  bra .doneplr1
  4836.  
  4837. .firenotpressed
  4838.  
  4839. ; fire was not pressed last frame...
  4840.  
  4841.  tst.b $65(a5)
  4842. ; if it has still not been pressed, go back above
  4843.  beq.s .firenownotpressed
  4844. ; fire was not pressed last time, and was this time, so has
  4845. ; been clicked.
  4846.  st PLR1_clicked
  4847.  st PLR1_fire
  4848.  
  4849. .doneplr1:
  4850.  
  4851.  move.l PLR1s_tyoff,d0
  4852.  move.l PLR1s_yoff,d1
  4853.  move.l PLR1s_yvel,d2
  4854.  sub.l d1,d0
  4855.  bgt.s .aboveground
  4856.  sub.l #512,d2
  4857.  blt.s .notfast
  4858.  move.l #0,d2
  4859. .notfast:
  4860.  add.l d2,d1
  4861.  sub.l d2,d0
  4862.  blt.s .pastitall
  4863.  move.l #0,d2
  4864.  add.l d0,d1
  4865.  bra.s .pastitall
  4866.  
  4867. .aboveground:
  4868.  add.l d2,d1
  4869.  add.l #1024,d2
  4870. .pastitall:
  4871.  
  4872.  move.l d2,PLR1s_yvel
  4873.  move.l d1,PLR1s_yoff
  4874.  
  4875.  rts
  4876.  
  4877. prot7: dc.w 0
  4878.  
  4879. SendToSlave:
  4880.  
  4881. ; First of all, position of player
  4882.  
  4883.  jsr INITSEND
  4884.  
  4885.  move.w PLR1_xoff,d0
  4886.  swap d0
  4887.  move.w PLR1_zoff,d0
  4888.  jsr SENDLONG
  4889.  
  4890.  move.l PLR1_yoff,d0
  4891.  jsr SENDLONG
  4892.  
  4893.  move.b PLR1_StoodInTop,d0
  4894.  lsl.w #8,d0
  4895.  move.l PLR1_Roompt,a2
  4896.  move.b 1(a2),d0
  4897.  swap d0
  4898.  move.w PLR1_angpos,d0
  4899.  jsr SENDLONG
  4900.  
  4901.  rts
  4902.  
  4903. Chan0inter:
  4904.  
  4905.  move.w #$0010,$dff000+intreq
  4906.  
  4907.  tst.b doanything
  4908.  bne.s dosomething
  4909.  rte
  4910.  
  4911. dosomething:
  4912.  
  4913.  jsr INITREC
  4914.  jsr RECEIVE
  4915.  
  4916.  tst.l BUFFER
  4917.  beq doneshake
  4918.  
  4919.  bsr SendToSlave
  4920.  
  4921. doneshake:
  4922.  
  4923.  addq.w #1,FramesToDraw
  4924.  tst.b counting
  4925.  beq nostopcounter
  4926.  JSR STOPCOUNTNOADD
  4927. nostopcounter:
  4928.  movem.l d0-d7/a0-a6,-(a7)
  4929.  
  4930.  cmp.b #'b',Prefsfile+3
  4931.  bne.s .noback
  4932.  jsr mt_music
  4933. .noback:
  4934.  
  4935.  bra dontshowtime
  4936.  
  4937.  tst.b oktodisplay
  4938.  beq dontshowtime
  4939.  clr.b oktodisplay
  4940.  subq.w #1,dispco
  4941.  bgt dontshowtime
  4942.  move.w #10,dispco
  4943.  
  4944.  move.l #TimerScr+10,a0
  4945.  move.l TimeCount,d0
  4946.  bge.s timenotneg
  4947.  move.l #1111*256,d0
  4948. timenotneg:
  4949.  asr.l #8,d0
  4950.  move.l #digits,a1
  4951.  move.w #7,d2
  4952. digitlop
  4953.  divs #10,d0
  4954.  swap d0
  4955.  lea (a1,d0.w*8),a2
  4956.  move.b (a2)+,(a0)
  4957.  move.b (a2)+,24(a0)
  4958.  move.b (a2)+,24*2(a0)
  4959.  move.b (a2)+,24*3(a0)
  4960.  move.b (a2)+,24*4(a0)
  4961.  move.b (a2)+,24*5(a0)
  4962.  move.b (a2)+,24*6(a0)
  4963.  move.b (a2)+,24*7(a0)
  4964.  subq #1,a0
  4965.  swap d0
  4966.  ext.l d0
  4967.  dbra d2,digitlop
  4968.  
  4969.  move.l #TimerScr+10+24*10,a0
  4970.  move.l NumTimes,d0
  4971.  move.l #digits,a1
  4972.  move.w #3,d2
  4973. digitlop2
  4974.  divs #10,d0
  4975.  swap d0
  4976.  lea (a1,d0.w*8),a2
  4977.  move.b (a2)+,(a0)
  4978.  move.b (a2)+,24(a0)
  4979.  move.b (a2)+,24*2(a0)
  4980.  move.b (a2)+,24*3(a0)
  4981.  move.b (a2)+,24*4(a0)
  4982.  move.b (a2)+,24*5(a0)
  4983.  move.b (a2)+,24*6(a0)
  4984.  move.b (a2)+,24*7(a0)
  4985.  subq #1,a0
  4986.  swap d0
  4987.  ext.l d0
  4988.  dbra d2,digitlop2
  4989.  
  4990.  move.l #TimerScr+10+24*20,a0
  4991.  moveq #0,d0
  4992.  move.w FramesToDraw,d0
  4993.  move.l #digits,a1
  4994.  move.w #2,d2
  4995. digitlop3
  4996.  divs #10,d0
  4997.  swap d0
  4998.  lea (a1,d0.w*8),a2
  4999.  move.b (a2)+,(a0)
  5000.  move.b (a2)+,24(a0)
  5001.  move.b (a2)+,24*2(a0)
  5002.  move.b (a2)+,24*3(a0)
  5003.  move.b (a2)+,24*4(a0)
  5004.  move.b (a2)+,24*5(a0)
  5005.  move.b (a2)+,24*6(a0)
  5006.  move.b (a2)+,24*7(a0)
  5007.  subq #1,a0
  5008.  swap d0
  5009.  ext.l d0
  5010.  dbra d2,digitlop3
  5011.  
  5012. dontshowtime:
  5013.  
  5014.  move.w Robotanimpos,d0
  5015.  add.w #6*38,d0
  5016.  cmp.w #6*38*64,d0
  5017.  blt.s norebot
  5018.  move.w #0,d0
  5019. norebot:
  5020.  move.w d0,Robotanimpos
  5021.  
  5022.  tst.w d0
  5023.  seq d1
  5024.  cmp.w #6*32*38,d0
  5025.  seq d2
  5026.  or.b d2,d1
  5027.  or.b d1,clump
  5028.  
  5029.  move.w Robotarmpos,d0
  5030.  add.w #6*14,d0
  5031.  cmp.w #6*14*64,d0
  5032.  blt.s norebot2
  5033.  move.w #0,d0
  5034. norebot2:
  5035.  move.w d0,Robotarmpos
  5036.  
  5037.  move.l alanptr,a0
  5038.  move.l (a0)+,alframe
  5039.  cmp.l #endalan,a0
  5040.  blt.s nostartalan
  5041.  move.l #alan,a0
  5042. nostartalan:
  5043.  move.l a0,alanptr
  5044.  
  5045.  move.l #$dff000,a6
  5046.  
  5047.  cmp.b #'4',Prefsfile+1
  5048.  bne.s nomuckabout
  5049.  
  5050.  move.w #$0,d0 
  5051.  tst.b NoiseMade0LEFT
  5052.  beq.s noturnoff0
  5053.  move.w #1,d0
  5054. noturnoff0:
  5055.  tst.b NoiseMade0RIGHT
  5056.  beq.s noturnoff1
  5057.  or.w #2,d0
  5058. noturnoff1:
  5059.  tst.b NoiseMade1RIGHT
  5060.  beq.s noturnoff2
  5061.  or.w #4,d0
  5062. noturnoff2:
  5063.  tst.b NoiseMade1LEFT
  5064.  beq.s noturnoff3
  5065.  or.w #8,d0
  5066. noturnoff3:
  5067.  move.w d0,dmacon(a6)
  5068.  
  5069. nomuckabout:
  5070.  
  5071.  tst.b PLR1MOUSE
  5072.  beq.s PLR1_nomouse
  5073.  bsr PLR1_mouse_control
  5074. PLR1_nomouse:
  5075.  tst.b PLR1KEYS
  5076.  beq.s PLR1_nokeys
  5077.  bsr PLR1_keyboard_control
  5078. PLR1_nokeys:
  5079. ; tst.b PLR1PATH
  5080. ; beq.s PLR1_nopath
  5081. ; bsr PLR1_follow_path
  5082. ;PLR1_nopath:
  5083.  tst.b PLR1JOY
  5084.  beq.s PLR1_nojoy
  5085.  bsr PLR1_JoyStick_control
  5086. PLR1_nojoy: 
  5087.  
  5088. ; tst.b PLR2_fire
  5089. ; beq.s firenotpressed2
  5090. ; fire was pressed last time.
  5091. ; btst #7,$bfe001
  5092. ; bne.s firenownotpressed2
  5093. ; fire is still pressed this time.
  5094. ; st PLR2_fire
  5095. ; bra dointer
  5096.  
  5097. firenownotpressed2:
  5098. ; fire has been released.
  5099. ; clr.b PLR2_fire
  5100. ; bra dointer
  5101.  
  5102. firenotpressed2
  5103.  
  5104. ; fire was not pressed last frame...
  5105.  
  5106. ; btst #7,$bfe001
  5107. ; if it has still not been pressed, go back above
  5108. ; bne.s firenownotpressed2
  5109. ; fire was not pressed last time, and was this time, so has
  5110. ; been clicked.
  5111. ; st PLR2_clicked
  5112. ; st PLR2_fire
  5113.  
  5114. dointer
  5115.  
  5116.  cmp.b #'4',Prefsfile+1
  5117.  beq fourchannel
  5118.  
  5119.  btst #1,$dff000+intreqr
  5120.  bne.s newsampbitl
  5121.  
  5122.  movem.l (a7)+,d0-d7/a0-a6
  5123.  tst.b counting
  5124.  beq .nostartcounter
  5125.  JSR STARTCOUNT
  5126. .nostartcounter:
  5127. noneed:
  5128.  
  5129.  rte
  5130.  
  5131.  
  5132. swappedem: dc.w 0
  5133.  
  5134. newsampbitl:
  5135.  
  5136.  move.w #$820f,$dff000+dmacon
  5137.  
  5138.  move.w #$200,$dff000+intreq
  5139.  
  5140. ; tst.b CHANNELDATA
  5141. ; bne nochannel0
  5142.  
  5143.  move.l pos0LEFT,a0
  5144.  move.l pos2LEFT,a1
  5145.  
  5146.  move.l #tab,a2
  5147.  
  5148.  moveq #0,d0
  5149.  moveq #0,d1
  5150.  move.b vol0left,d0
  5151.  move.b vol2left,d1
  5152.  cmp.b d1,d0
  5153.  slt swappedem
  5154.  bge.s fbig0
  5155.  
  5156. ; d1 is bigger so scale d0 and use d1
  5157. ; as audiochannel volume.
  5158.  
  5159.  exg a0,a1
  5160.  asl.w #6,d0
  5161.  divs d1,d0
  5162.  lsl.w #8,d0
  5163.  adda.w d0,a2
  5164.  move.w d1,$dff0a8
  5165.  bra.s donechan0
  5166.  
  5167. fbig0:
  5168.  tst.w d0
  5169.  beq.s donechan0
  5170.  asl.w #6,d1
  5171.  divs d0,d1
  5172.  lsl.w #8,d1
  5173.  adda.w d1,a2
  5174.  move.w d0,$dff0a8
  5175.  
  5176. donechan0:
  5177.  
  5178.  move.l Aupt0,a3
  5179.  move.l a3,$dff0a0
  5180.  move.l Auback0,Aupt0
  5181.  move.l a3,Auback0
  5182.  
  5183.  move.l Auback0,a3
  5184.  
  5185.  moveq #0,d0
  5186.  moveq #0,d1
  5187.  moveq #0,d2
  5188.  moveq #0,d3
  5189.  moveq #0,d4
  5190.  moveq #0,d5
  5191.  move.w #49,d7
  5192. loop:
  5193.  move.l (a0)+,d0
  5194.  move.b (a1)+,d1
  5195.  move.b (a1)+,d2
  5196.  move.b (a1)+,d3
  5197.  move.b (a1)+,d4
  5198.  move.b (a2,d3.w),d5
  5199.  swap d5
  5200.  move.b (a2,d1.w),d5
  5201.  asl.l #8,d5
  5202.  move.b (a2,d2.w),d5
  5203.  swap d5
  5204.  move.b (a2,d4.w),d5
  5205.  add.l d5,d0
  5206.  move.l d0,(a3)+
  5207.  dbra d7,loop
  5208.  
  5209.  tst.b swappedem
  5210.  beq.s .ok23
  5211.  exg a0,a1
  5212. .ok23:
  5213.  
  5214.  cmp.l Samp0endLEFT,a0
  5215.  blt.s .notoffendsamp1
  5216.  move.l #bass,a0
  5217.  move.l #bassend,Samp0endLEFT
  5218.  move.b #63,vol0left
  5219.  st LEFTCHANDATA+1
  5220.  move.w #0,LEFTCHANDATA+2
  5221. .notoffendsamp1:
  5222.  
  5223.  cmp.l Samp2endLEFT,a1
  5224.  blt.s .notoffendsamp2
  5225.  move.l #empty,a1
  5226.  move.l #emptyend,Samp2endLEFT
  5227.  move.b #0,vol2left
  5228.  st LEFTCHANDATA+1+8
  5229.  move.w #0,LEFTCHANDATA+2+8
  5230. .notoffendsamp2:
  5231.  
  5232.  move.l a0,pos0LEFT
  5233.  move.l a1,pos2LEFT
  5234.  
  5235. nochannel0:
  5236.  
  5237.  tst.b CHANNELDATA+16
  5238.  bne nochannel1
  5239.  
  5240.  
  5241.  move.l pos0RIGHT,a0
  5242.  move.l pos2RIGHT,a1
  5243.  
  5244.  move.l Aupt1,a3
  5245.  move.l a3,$dff0b0
  5246.  move.l Auback1,Aupt1
  5247.  move.l a3,Auback1
  5248.  
  5249.  move.l #tab,a2
  5250.  
  5251.  moveq #0,d0
  5252.  moveq #0,d1
  5253.  move.b vol0right,d0
  5254.  move.b vol2right,d1
  5255.  cmp.b d1,d0
  5256.  slt swappedem
  5257.  bge.s fbig1
  5258.  
  5259. ; d1 is bigger so scale d0 and use d1
  5260. ; as audiochannel volume.
  5261.  
  5262.  exg a0,a1
  5263.  asl.w #6,d0
  5264.  divs d1,d0
  5265.  lsl.w #8,d0
  5266.  adda.w d0,a2
  5267.  move.w d1,$dff0b8
  5268.  bra.s donechan1
  5269.  
  5270. fbig1:
  5271.  tst.w d0
  5272.  beq.s donechan1
  5273.  asl.w #6,d1
  5274.  divs d0,d1
  5275.  lsl.w #8,d1
  5276.  adda.w d1,a2
  5277.  move.w d0,$dff0b8
  5278.  
  5279. donechan1:
  5280.  moveq #0,d0
  5281.  moveq #0,d1
  5282.  moveq #0,d2
  5283.  moveq #0,d3
  5284.  moveq #0,d4
  5285.  moveq #0,d5
  5286.  move.w #49,d7
  5287. loop2:
  5288.  move.l (a0)+,d0
  5289.  move.b (a1)+,d1
  5290.  move.b (a1)+,d2
  5291.  move.b (a1)+,d3
  5292.  move.b (a1)+,d4
  5293.  move.b (a2,d3.w),d5
  5294.  swap d5
  5295.  move.b (a2,d1.w),d5
  5296.  asl.l #8,d5
  5297.  move.b (a2,d2.w),d5
  5298.  swap d5
  5299.  move.b (a2,d4.w),d5
  5300.  add.l d5,d0
  5301.  move.l d0,(a3)+
  5302.  dbra d7,loop2
  5303.  
  5304.  tst.b swappedem
  5305.  beq.s ok01
  5306.  exg a0,a1
  5307. ok01:
  5308.  
  5309.  cmp.l Samp0endRIGHT,a0
  5310.  blt.s .notoffendsamp1
  5311.  move.l #empty,a0
  5312.  move.l #emptyend,Samp0endRIGHT
  5313.  move.b #0,vol0right
  5314.  st RIGHTCHANDATA+1
  5315.  move.w #0,RIGHTCHANDATA+2
  5316. .notoffendsamp1:
  5317.  
  5318.  cmp.l Samp2endRIGHT,a1
  5319.  blt.s .notoffendsamp2
  5320.  move.l #empty,a1
  5321.  move.l #emptyend,Samp2endRIGHT
  5322.  move.b #0,vol2right
  5323.  st RIGHTCHANDATA+1+8
  5324.  move.w #0,RIGHTCHANDATA+2+8
  5325. .notoffendsamp2:
  5326.  
  5327.  move.l a0,pos0RIGHT
  5328.  move.l a1,pos2RIGHT
  5329.  
  5330. nochannel1:
  5331.  
  5332. ******************* Other two channels
  5333.  
  5334.  move.l pos1LEFT,a0
  5335.  move.l pos3LEFT,a1
  5336.  
  5337.  move.l #tab,a2
  5338.  
  5339.  moveq #0,d0
  5340.  moveq #0,d1
  5341.  move.b vol1left,d0
  5342.  move.b vol3left,d1
  5343.  cmp.b d1,d0
  5344.  slt swappedem
  5345.  bge.s fbig2
  5346.  
  5347. ; d1 is bigger so scale d0 and use d1
  5348. ; as audiochannel volume.
  5349.  
  5350.  exg a0,a1
  5351.  asl.w #6,d0
  5352.  divs d1,d0
  5353.  lsl.w #8,d0
  5354.  adda.w d0,a2
  5355.  move.w d1,$dff0d8
  5356.  bra.s donechan2
  5357.  
  5358. fbig2:
  5359.  tst.w d0
  5360.  beq.s donechan2
  5361.  asl.w #6,d1
  5362.  divs d0,d1
  5363.  lsl.w #8,d1
  5364.  adda.w d1,a2
  5365.  move.w d0,$dff0d8
  5366.  
  5367. donechan2:
  5368.  
  5369.  move.l Aupt2,a3
  5370.  move.l a3,$dff0d0
  5371.  move.l Auback2,Aupt2
  5372.  move.l a3,Auback2
  5373.  
  5374.  moveq #0,d0
  5375.  moveq #0,d1
  5376.  moveq #0,d2
  5377.  moveq #0,d3
  5378.  moveq #0,d4
  5379.  moveq #0,d5
  5380.  move.w #49,d7
  5381. loop3:
  5382.  move.l (a0)+,d0
  5383.  move.b (a1)+,d1
  5384.  move.b (a1)+,d2
  5385.  move.b (a1)+,d3
  5386.  move.b (a1)+,d4
  5387.  move.b (a2,d3.w),d5
  5388.  swap d5
  5389.  move.b (a2,d1.w),d5
  5390.  asl.l #8,d5
  5391.  move.b (a2,d2.w),d5
  5392.  swap d5
  5393.  move.b (a2,d4.w),d5
  5394.  add.l d5,d0
  5395.  move.l d0,(a3)+
  5396.  dbra d7,loop3
  5397.  
  5398.  tst.b swappedem
  5399.  beq.s .ok23
  5400.  exg a0,a1
  5401. .ok23:
  5402.  
  5403.  cmp.l Samp1endLEFT,a0
  5404.  blt.s .notoffendsamp3
  5405.  move.l #empty,a0
  5406.  move.l #emptyend,Samp1endLEFT
  5407.  move.b #0,vol1left
  5408.  st LEFTCHANDATA+1+4
  5409.  move.w #0,LEFTCHANDATA+2+4
  5410. .notoffendsamp3:
  5411.  
  5412.  cmp.l Samp3endLEFT,a1
  5413.  blt.s .notoffendsamp4
  5414.  move.l #empty,a1
  5415.  move.l #emptyend,Samp3endLEFT
  5416.  move.b #0,vol3left
  5417.  st LEFTCHANDATA+1+12
  5418.  move.w #0,LEFTCHANDATA+2+12
  5419. .notoffendsamp4:
  5420.  
  5421.  move.l a0,pos1LEFT
  5422.  move.l a1,pos3LEFT
  5423.  
  5424.  move.l pos1RIGHT,a0
  5425.  move.l pos3RIGHT,a1
  5426.  
  5427.  move.l Aupt3,a3
  5428.  move.l a3,$dff0c0
  5429.  move.l Auback3,Aupt3
  5430.  move.l a3,Auback3
  5431.  
  5432.  move.l #tab,a2
  5433.  
  5434.  moveq #0,d0
  5435.  moveq #0,d1
  5436.  move.b vol1right,d0
  5437.  move.b vol3right,d1
  5438.  cmp.b d1,d0
  5439.  slt.s swappedem
  5440.  bge.s fbig3
  5441.  
  5442.  exg a0,a1
  5443.  asl.w #6,d0
  5444.  divs d1,d0
  5445.  lsl.w #8,d0
  5446.  adda.w d0,a2
  5447.  move.w d1,$dff0c8
  5448.  bra.s donechan3
  5449.  
  5450. fbig3:
  5451.  tst.w d0
  5452.  beq.s donechan3
  5453.  asl.w #6,d1
  5454.  divs d0,d1
  5455.  lsl.w #8,d1
  5456.  adda.w d1,a2
  5457.  move.w d0,$dff0c8
  5458. donechan3:
  5459.  
  5460.  moveq #0,d0
  5461.  moveq #0,d1
  5462.  moveq #0,d2
  5463.  moveq #0,d3
  5464.  moveq #0,d4
  5465.  moveq #0,d5
  5466.  move.w #49,d7
  5467. loop4:
  5468.  move.l (a0)+,d0
  5469.  move.b (a1)+,d1
  5470.  move.b (a1)+,d2
  5471.  move.b (a1)+,d3
  5472.  move.b (a1)+,d4
  5473.  move.b (a2,d3.w),d5
  5474.  swap d5
  5475.  move.b (a2,d1.w),d5
  5476.  asl.l #8,d5
  5477.  move.b (a2,d2.w),d5
  5478.  swap d5
  5479.  move.b (a2,d4.w),d5
  5480.  add.l d5,d0
  5481.  move.l d0,(a3)+
  5482.  dbra d7,loop4
  5483.  
  5484.  tst.b swappedem
  5485.  beq.s .ok23
  5486.  exg a0,a1
  5487. .ok23:
  5488.  
  5489.  cmp.l Samp1endRIGHT,a0
  5490.  blt.s notoffendsamp3
  5491.  move.l #empty,a0
  5492.  move.l #emptyend,Samp1endRIGHT
  5493.  move.b #0,vol1right
  5494.  st RIGHTCHANDATA+1+4
  5495.  move.w #0,RIGHTCHANDATA+2+4
  5496. notoffendsamp3:
  5497.  
  5498.  cmp.l Samp3endRIGHT,a1
  5499.  blt.s notoffendsamp4
  5500.  move.l #empty,a1
  5501.  move.l #emptyend,Samp3endRIGHT
  5502.  move.b #0,vol3right
  5503.  st RIGHTCHANDATA+1+12
  5504.  move.w #0,RIGHTCHANDATA+2+12
  5505. notoffendsamp4:
  5506.  
  5507.  move.l a0,pos1RIGHT
  5508.  move.l a1,pos3RIGHT
  5509.  
  5510.  movem.l (a7)+,d0-d7/a0-a6
  5511.  tst.b counting
  5512.  beq .nostartcounter
  5513.  JSR STARTCOUNT
  5514. .nostartcounter:
  5515.  
  5516.  rte
  5517.  
  5518. ***********************************
  5519. * 4 channel sound routine
  5520. ***********************************
  5521.  
  5522. fourchannel:
  5523.  
  5524.  move.l #$dff000,a6
  5525.  
  5526.  btst #7,intreqrl(a6)
  5527.  beq.s nofinish0
  5528.  move.w #0,LEFTCHANDATA+2
  5529.  st LEFTCHANDATA+1
  5530.  move.l #bass,$a0(a6)
  5531.  move.w #18370/2,$a4(a6) 
  5532.  move.w #$0080,intreq(a6)
  5533. nofinish0:
  5534.  
  5535.  tst.b NoiseMade0pLEFT
  5536.  beq.s NoChan0sound
  5537.  
  5538.  move.l Samp0endLEFT,d0
  5539.  move.l pos0LEFT,d1
  5540.  sub.l d1,d0
  5541.  asr.w #1,d0
  5542.  move.w d0,$a4(a6)
  5543.  move.l d1,$a0(a6)
  5544.  move.w #$8201,dmacon(a6)
  5545.  moveq #0,d0
  5546.  move.b vol0left,d0
  5547.  move.w d0,$a8(a6)
  5548.  
  5549. NoChan0sound:
  5550.  
  5551.  btst #0,intreqr(a6)
  5552.  beq.s nofinish1
  5553.  move.w #0,RIGHTCHANDATA+2
  5554.  st RIGHTCHANDATA+1
  5555.  move.l #null,$b0(a6)
  5556.  move.w #100,$b4(a6)
  5557.  move.w #$0100,intreq(a6)
  5558. nofinish1:
  5559.  
  5560.  tst.b NoiseMade0pRIGHT
  5561.  beq.s NoChan1sound
  5562.  
  5563.  move.l Samp0endRIGHT,d0
  5564.  move.l pos0RIGHT,d1
  5565.  sub.l d1,d0
  5566.  asr.w #1,d0
  5567.  move.w d0,$b4(a6)
  5568.  move.l d1,$b0(a6)
  5569.  move.w #$8202,dmacon(a6)
  5570.  moveq #0,d0
  5571.  move.b vol0right,d0
  5572.  move.w d0,$b8(a6)
  5573.  
  5574. NoChan1sound:
  5575.  
  5576.  
  5577.  btst #1,intreqr(a6)
  5578.  beq.s nofinish2
  5579.  move.w #0,RIGHTCHANDATA+2+4
  5580.  st RIGHTCHANDATA+1+4
  5581.  move.l #null,$c0(a6)
  5582.  move.w #100,$c4(a6)
  5583.  move.w #$0200,intreq(a6)
  5584. nofinish2:
  5585.  
  5586.  tst.b NoiseMade1pRIGHT
  5587.  beq.s NoChan2sound
  5588.  
  5589.  move.l Samp1endRIGHT,d0
  5590.  move.l pos1RIGHT,d1
  5591.  sub.l d1,d0
  5592.  asr.w #1,d0
  5593.  move.w d0,$c4(a6)
  5594.  move.l d1,$c0(a6)
  5595.  move.w #$8204,dmacon(a6)
  5596.  moveq #0,d0
  5597.  move.b vol1right,d0
  5598.  move.w d0,$c8(a6)
  5599.  
  5600. NoChan2sound:
  5601.  
  5602.  btst #2,intreqr(a6)
  5603.  beq.s nofinish3
  5604.  move.w #0,LEFTCHANDATA+2+4
  5605.  st LEFTCHANDATA+1+4
  5606.  move.l #null,$d0(a6)
  5607.  move.w #100,$d4(a6)
  5608.  move.w #$0400,intreq(a6)
  5609. nofinish3:
  5610.  
  5611.  tst.b NoiseMade1pLEFT
  5612.  beq.s NoChan3sound
  5613.  
  5614.  move.l Samp1endLEFT,d0
  5615.  move.l pos1LEFT,d1
  5616.  sub.l d1,d0
  5617.  asr.w #1,d0
  5618.  move.w d0,$d4(a6)
  5619.  move.l d1,$d0(a6)
  5620.  move.w #$8208,dmacon(a6)
  5621.  moveq #0,d0
  5622.  move.b vol1left,d0
  5623.  move.w d0,$d8(a6)
  5624.  
  5625. NoChan3sound:
  5626.  
  5627. nomorechannels:
  5628.  
  5629.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  5630.  move.l #0,NoiseMade0LEFT
  5631.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  5632.  move.l #0,NoiseMade0RIGHT
  5633.  
  5634.  movem.l (a7)+,d0-d7/a0-a6
  5635.  tst.b counting
  5636.  beq .nostartcounter
  5637.  JSR STARTCOUNT
  5638. .nostartcounter:
  5639.  
  5640.  rte
  5641.  
  5642. backbeat: dc.w 0
  5643.  
  5644. Samp0endRIGHT: dc.l emptyend
  5645. Samp1endRIGHT: dc.l emptyend
  5646. Samp2endRIGHT: dc.l emptyend
  5647. Samp3endRIGHT: dc.l emptyend
  5648. Samp0endLEFT: dc.l emptyend
  5649. Samp1endLEFT: dc.l emptyend
  5650. Samp2endLEFT: dc.l emptyend
  5651. Samp3endLEFT: dc.l emptyend
  5652.  
  5653. Aupt0: dc.l null
  5654. Auback0: dc.l null+500
  5655. Aupt2: dc.l null3
  5656. Auback2: dc.l null3+500
  5657. Aupt3: dc.l null4
  5658. Auback3: dc.l null4+500
  5659. Aupt1: dc.l null2
  5660. Auback1: dc.l null2+500
  5661.  
  5662. NoiseMade0LEFT: dc.b 0
  5663. NoiseMade1LEFT: dc.b 0
  5664. NoiseMade2LEFT: dc.b 0
  5665. NoiseMade3LEFT: dc.b 0
  5666. NoiseMade0pLEFT: dc.b 0
  5667. NoiseMade1pLEFT: dc.b 0
  5668. NoiseMade2pLEFT: dc.b 0
  5669. NoiseMade3pLEFT: dc.b 0
  5670. NoiseMade0RIGHT: dc.b 0
  5671. NoiseMade1RIGHT: dc.b 0
  5672. NoiseMade2RIGHT: dc.b 0
  5673. NoiseMade3RIGHT: dc.b 0
  5674. NoiseMade0pRIGHT: dc.b 0
  5675. NoiseMade1pRIGHT: dc.b 0
  5676. NoiseMade2pRIGHT: dc.b 0
  5677. NoiseMade3pRIGHT: dc.b 0
  5678.  
  5679. empty: ds.l 100
  5680. emptyend:
  5681.  
  5682. **************************************
  5683. * I want a routine to calculate all the
  5684. * info needed for the sound player to
  5685. * work, given say position of noise, volume
  5686. * and sample number.
  5687.  
  5688. Samplenum: dc.w 0
  5689. Noisex: dc.w 0
  5690. Noisez: dc.w 0
  5691. Noisevol: dc.w 0
  5692. chanpick: dc.w 0
  5693. IDNUM: dc.w 0
  5694. needleft: dc.b 0
  5695. needright: dc.b 0
  5696. STEREO: dc.b $0
  5697. even
  5698. prot6: dc.w 0
  5699.  
  5700.  even
  5701.  
  5702. CHANNELDATA:
  5703. LEFTCHANDATA:
  5704.  dc.l $FF000000
  5705.  dc.l $00000000
  5706.  dc.l $00000000
  5707.  dc.l $00000000
  5708. RIGHTCHANDATA:
  5709.  dc.l $00000000
  5710.  dc.l $00000000
  5711.  dc.l $00000000
  5712.  dc.l $00000000
  5713.  
  5714. RIGHTPLAYEDTAB: ds.l 20
  5715. LEFTPLAYEDTAB: ds.l 20
  5716.  
  5717. MakeSomeNoise:
  5718.  
  5719. ; Plan for new sound handler:
  5720. ; It is sent a sample number,
  5721. ; a position relative to the
  5722. ; player, an id number and a volume.
  5723. ; Also notifplaying.
  5724.  
  5725. ; indirect inputs are the available
  5726. ; channel flags and whether or not
  5727. ; stereo sound is selected.
  5728.  
  5729. ; the algorithm must decide
  5730. ; whether the new sound is more
  5731. ; important than the ones already
  5732. ; playing. Thus an 'importance'
  5733. ; must be calculated, probably
  5734. ; using volume.
  5735.  
  5736. ; The output needs to be:
  5737.  
  5738. ; Write the pointers and volumes of
  5739. ; the sound channels
  5740.  
  5741.  
  5742.  tst.b notifplaying
  5743.  beq.s dontworry
  5744.  
  5745. ; find if we are already playing
  5746.  
  5747.  move.b IDNUM,d0
  5748.  move.w #7,d1
  5749.  lea CHANNELDATA,a3
  5750. findsameasme
  5751.  tst.b (a3)
  5752.  bne.s notavail
  5753.  cmp.b 1(a3),d0
  5754.  beq SameAsMe
  5755. notavail:
  5756.  add.w #4,a3
  5757.  dbra d1,findsameasme
  5758.  bra dontworry
  5759. SameAsMe
  5760.  rts
  5761.  
  5762. dontworry:
  5763.  
  5764. ; Ok its fine for us to play a sound.
  5765. ; So calculate left/right volume.
  5766.  
  5767.  move.w Noisex,d1
  5768.  muls d1,d1
  5769.  move.w Noisez,d2
  5770.  muls d2,d2
  5771.  move.w #64,d3
  5772.  moveq #1,d0
  5773.  add.l d1,d2
  5774.  beq pastcalc
  5775.  
  5776.  move.w #31,d0
  5777. .findhigh
  5778.  btst d0,d2
  5779.  bne .foundhigh
  5780.  dbra d0,.findhigh
  5781. .foundhigh
  5782.  asr.w #1,d0
  5783.  clr.l d3
  5784.  bset d0,d3
  5785.  move.l d3,d0
  5786.  
  5787.  move.w d0,d3
  5788.  muls d3,d3    ; x*x
  5789.  sub.l d2,d3    ; x*x-a
  5790.  asr.l #1,d3    ; (x*x-a)/2
  5791.  divs d0,d3    ; (x*x-a)/2x
  5792.  sub.w d3,d0    ; second approx
  5793.  bgt .stillnot0
  5794.  move.w #1,d0
  5795. .stillnot0
  5796.  
  5797.  move.w d0,d3
  5798.  muls d3,d3
  5799.  sub.l d2,d3
  5800.  asr.l #1,d3
  5801.  divs d0,d3
  5802.  sub.w d3,d0    ; second approx
  5803.  bgt .stillnot02
  5804.  move.w #1,d0
  5805. .stillnot02
  5806.  
  5807.  move.w #64,d3
  5808.  muls Noisevol,d3
  5809.  asr.w #1,d0
  5810.  addq #1,d0
  5811.  divs d0,d3
  5812.  
  5813.  cmp.w #64,d3
  5814.  ble.s notooloud
  5815.  move.w #64,d3
  5816. notooloud:
  5817.  
  5818. pastcalc:
  5819.  
  5820.     ; d3 contains volume of noise.
  5821.     
  5822.  move.w d3,d4
  5823.  
  5824.  move.w d3,d2
  5825.  muls Noisex,d2
  5826.  add.w d0,d0
  5827.  divs d0,d2
  5828.  
  5829.  bgt.s quietleft
  5830.  add.w d2,d4
  5831.  bge.s donequiet
  5832.  move.w #0,d4
  5833.  bra.s donequiet
  5834. quietleft:
  5835.  sub.w d2,d3
  5836.  bge.s donequiet
  5837.  move.w #0,d3
  5838. donequiet:
  5839.  
  5840. ; d3=leftvol?
  5841. ; d4=rightvol?
  5842.  
  5843.  clr.w needleft
  5844.  
  5845.  cmp.b d3,d4
  5846.  bgt.s RightLouder
  5847.  
  5848. ; Left is louder; is it MUCH louder?
  5849.  
  5850.  st needleft
  5851.  move.w d3,d2
  5852.  sub.w d4,d2
  5853.  cmp.w #32,d2
  5854.  slt needright
  5855.  bra aboutsame
  5856.  
  5857. RightLouder:
  5858.  st needright
  5859.  move.w d4,d2
  5860.  sub.w d3,d2
  5861.  cmp.w #32,d2
  5862.  slt needleft
  5863.  
  5864. aboutsame:
  5865.  
  5866.  tst.b STEREO
  5867.  beq NOSTEREO
  5868.  
  5869. ; Find least important sound on left
  5870.  
  5871.  move.l #0,a2
  5872.  move.l #0,d5
  5873.  move.w #10000,d2
  5874.  move.b IDNUM,d0
  5875.  lea LEFTCHANDATA,a3
  5876.  move.w #3,d1
  5877. FindLeftChannel
  5878.  tst.b (a3)
  5879.  bne.s .notactive
  5880.  cmp.b 1(a3),d0
  5881.  beq.s FOUNDLEFT
  5882.  cmp.w 2(a3),d2
  5883.  blt.s .notactive
  5884.  move.w 2(a3),d2
  5885.  move.l a3,a2
  5886.  move.w d5,d6
  5887.  
  5888. .notactive:
  5889.  add.w #4,a3
  5890.  add.w #1,d5
  5891.  dbra d1,FindLeftChannel
  5892.  move.l a2,a3
  5893.  bra.s gopastleft
  5894. FOUNDLEFT:
  5895.  move.w d5,d6
  5896. gopastleft:
  5897.  tst.l a3
  5898.  bne.s FOUNDALEFT
  5899.  rts
  5900. FOUNDALEFT:
  5901.  
  5902. ; d6 = channel number
  5903.  move.b d0,1(a3)
  5904.  move.w d3,2(a3)
  5905.  
  5906.  move.w Samplenum,d5
  5907.  move.l #SampleList,a3
  5908.  move.l (a3,d5.w*8),a1
  5909.  move.l 4(a3,d5.w*8),a2
  5910.  
  5911.  tst.b d6
  5912.  seq NoiseMade0LEFT
  5913.  beq.s .chan0
  5914.  cmp.b #2,d6
  5915.  slt NoiseMade1LEFT
  5916.  blt .chan1
  5917.  seq NoiseMade2LEFT
  5918.  beq .chan2
  5919.  st NoiseMade3LEFT
  5920.  
  5921.  move.b d5,LEFTPLAYEDTAB+9
  5922.  move.b d3,LEFTPLAYEDTAB+1+9
  5923.  move.b d4,LEFTPLAYEDTAB+2+9
  5924.  move.b d3,vol3left
  5925.  move.l a1,pos3LEFT
  5926.  move.l a2,Samp3endLEFT
  5927.  bra dorightchan
  5928.  
  5929. .chan0: 
  5930.  move.b d5,LEFTPLAYEDTAB
  5931.  move.b d3,LEFTPLAYEDTAB+1
  5932.  move.b d4,LEFTPLAYEDTAB+2
  5933.  move.l a1,pos0LEFT
  5934.  move.l a2,Samp0endLEFT
  5935.  move.b d3,vol0left
  5936.  bra dorightchan
  5937.  
  5938. .chan1:
  5939.  move.b d5,LEFTPLAYEDTAB+3
  5940.  move.b d3,LEFTPLAYEDTAB+1+3
  5941.  move.b d4,LEFTPLAYEDTAB+2+3
  5942.  move.b d3,vol1left
  5943.  move.l a1,pos1LEFT
  5944.  move.l a2,Samp1endLEFT
  5945.  bra dorightchan
  5946.  
  5947. .chan2: 
  5948.  move.b d5,LEFTPLAYEDTAB+6
  5949.  move.b d3,LEFTPLAYEDTAB+1+6
  5950.  move.b d4,LEFTPLAYEDTAB+2+6
  5951.  move.l a1,pos2LEFT
  5952.  move.l a2,Samp2endLEFT
  5953.  move.b d3,vol2left
  5954.  
  5955. dorightchan:
  5956.  
  5957. ; Find least important sound on right
  5958.  
  5959.  move.l #0,a2
  5960.  move.l #0,d5
  5961.  move.w #10000,d2
  5962.  move.b IDNUM,d0
  5963.  lea RIGHTCHANDATA,a3
  5964.  move.w #3,d1
  5965. FindRightChannel
  5966.  tst.b (a3)
  5967.  bne.s .notactive
  5968.  cmp.b 1(a3),d0
  5969.  beq.s FOUNDRIGHT
  5970.  cmp.w 2(a3),d2
  5971.  blt.s .notactive
  5972.  move.w 2(a3),d2
  5973.  move.l a3,a2
  5974.  move.w d5,d6
  5975.  
  5976. .notactive:
  5977.  add.w #4,a3
  5978.  add.w #1,d5
  5979.  dbra d1,FindRightChannel
  5980.  move.l a2,a3
  5981.  bra.s gopastright
  5982. FOUNDRIGHT:
  5983.  move.w d5,d6
  5984. gopastright:
  5985.  tst.l a3
  5986.  bne.s FOUNDARIGHT
  5987.  rts
  5988. FOUNDARIGHT:
  5989.  
  5990. ; d6 = channel number
  5991.  move.b d0,1(a3)
  5992.  move.w d3,2(a3)
  5993.  
  5994.  move.w Samplenum,d5
  5995.  move.l #SampleList,a3
  5996.  move.l (a3,d5.w*8),a1
  5997.  move.l 4(a3,d5.w*8),a2
  5998.  
  5999.  tst.b d6
  6000.  seq NoiseMade0RIGHT
  6001.  beq.s .chan0
  6002.  cmp.b #2,d6
  6003.  slt NoiseMade1RIGHT
  6004.  blt .chan1
  6005.  seq NoiseMade2RIGHT
  6006.  beq .chan2
  6007.  st NoiseMade3RIGHT
  6008.  
  6009.  move.b d5,RIGHTPLAYEDTAB+9
  6010.  move.b d3,RIGHTPLAYEDTAB+1+9
  6011.  move.b d4,RIGHTPLAYEDTAB+2+9
  6012.  move.b d4,vol3right
  6013.  move.l a1,pos3RIGHT
  6014.  move.l a2,Samp3endRIGHT
  6015.  rts
  6016.  
  6017. .chan0: 
  6018.  move.b d5,RIGHTPLAYEDTAB
  6019.  move.b d3,RIGHTPLAYEDTAB+1
  6020.  move.b d4,RIGHTPLAYEDTAB+2
  6021.  move.l a1,pos0RIGHT
  6022.  move.l a2,Samp0endRIGHT
  6023.  move.b d4,vol0right
  6024.  rts
  6025.  
  6026. .chan1:
  6027.  move.b d5,RIGHTPLAYEDTAB+3
  6028.  move.b d3,RIGHTPLAYEDTAB+1+3
  6029.  move.b d4,RIGHTPLAYEDTAB+2+3
  6030.  move.b d3,vol1right
  6031.  move.l a1,pos1RIGHT
  6032.  move.l a2,Samp1endRIGHT
  6033.  rts
  6034.  
  6035. .chan2: 
  6036.  move.b d5,RIGHTPLAYEDTAB+6
  6037.  move.b d3,RIGHTPLAYEDTAB+1+6
  6038.  move.b d4,RIGHTPLAYEDTAB+2+6
  6039.  move.l a1,pos2RIGHT
  6040.  move.l a2,Samp2endRIGHT
  6041.  move.b d3,vol2right
  6042.  rts
  6043.  
  6044. NOSTEREO:
  6045.  move.l #0,a2
  6046.  move.l #0,d5
  6047.  move.w #10000,d2
  6048.  move.b IDNUM,d0
  6049.  lea CHANNELDATA,a3
  6050.  move.w #7,d1
  6051. FindChannel
  6052.  tst.b (a3)
  6053.  bne.s .notactive
  6054.  cmp.b 1(a3),d0
  6055.  beq.s FOUNDCHAN
  6056.  cmp.w 2(a3),d2
  6057.  blt.s .notactive
  6058.  move.w 2(a3),d2
  6059.  move.l a3,a2
  6060.  move.w d5,d6
  6061.  
  6062. .notactive:
  6063.  add.w #4,a3
  6064.  add.w #1,d5
  6065.  dbra d1,FindChannel
  6066.  move.l a2,a3
  6067.  bra.s gopastchan
  6068. FOUNDCHAN:
  6069.  move.w d5,d6
  6070. gopastchan:
  6071.  tst.l a3
  6072.  bne.s FOUNDACHAN
  6073. tooquiet:
  6074.  rts
  6075. FOUNDACHAN:
  6076.  
  6077. ; d6 = channel number
  6078.  
  6079.  cmp.w d2,d3
  6080.  blt.s tooquiet
  6081.  
  6082.  move.b d0,1(a3)
  6083.  move.w d3,2(a3)
  6084.  
  6085.  move.w Samplenum,d5
  6086.  move.l #SampleList,a3
  6087.  move.l (a3,d5.w*8),a1
  6088.  move.l 4(a3,d5.w*8),a2
  6089.  
  6090.  tst.b d6
  6091.  seq NoiseMade0LEFT
  6092.  beq .chan0
  6093.  cmp.b #2,d6
  6094.  slt NoiseMade1LEFT
  6095.  blt .chan1
  6096.  seq NoiseMade2LEFT
  6097.  beq .chan2
  6098.  cmp.b #4,d6
  6099.  slt NoiseMade3LEFT
  6100.  blt .chan3
  6101.  seq NoiseMade0RIGHT
  6102.  beq .chan4
  6103.  cmp.b #6,d6
  6104.  slt NoiseMade1RIGHT
  6105.  blt .chan5
  6106.  seq NoiseMade2RIGHT
  6107.  beq .chan6
  6108.  st NoiseMade3RIGHT
  6109.  
  6110.  move.b d5,RIGHTPLAYEDTAB+9
  6111.  move.b d3,RIGHTPLAYEDTAB+1+9
  6112.  move.b d4,RIGHTPLAYEDTAB+2+9
  6113.  move.b d4,vol3right
  6114.  move.l a1,pos3RIGHT
  6115.  move.l a2,Samp3endRIGHT
  6116.  rts
  6117.  
  6118. .chan3:
  6119.  move.b d5,LEFTPLAYEDTAB+9
  6120.  move.b d3,LEFTPLAYEDTAB+1+9
  6121.  move.b d4,LEFTPLAYEDTAB+2+9
  6122.  move.b d3,vol3left
  6123.  move.l a1,pos3LEFT
  6124.  move.l a2,Samp3endLEFT
  6125.  bra dorightchan
  6126.  
  6127. .chan0: 
  6128.  move.b d5,LEFTPLAYEDTAB
  6129.  move.b d3,LEFTPLAYEDTAB+1
  6130.  move.b d4,LEFTPLAYEDTAB+2
  6131.  move.l a1,pos0LEFT
  6132.  move.l a2,Samp0endLEFT
  6133.  move.b d3,vol0left
  6134.  rts
  6135.  
  6136. .chan1:
  6137.  move.b d5,LEFTPLAYEDTAB+3
  6138.  move.b d3,LEFTPLAYEDTAB+1+3
  6139.  move.b d4,LEFTPLAYEDTAB+2+3
  6140.  move.b d3,vol1left
  6141.  move.l a1,pos1LEFT
  6142.  move.l a2,Samp1endLEFT
  6143.  rts
  6144.  
  6145. .chan2: 
  6146.  move.b d5,LEFTPLAYEDTAB+6
  6147.  move.b d3,LEFTPLAYEDTAB+1+6
  6148.  move.b d4,LEFTPLAYEDTAB+2+6
  6149.  move.l a1,pos2LEFT
  6150.  move.l a2,Samp2endLEFT
  6151.  move.b d3,vol2left
  6152.  rts
  6153.  
  6154. .chan4: 
  6155.  move.b d5,RIGHTPLAYEDTAB
  6156.  move.b d3,RIGHTPLAYEDTAB+1
  6157.  move.b d4,RIGHTPLAYEDTAB+2
  6158.  move.l a1,pos0RIGHT
  6159.  move.l a2,Samp0endRIGHT
  6160.  move.b d4,vol0right
  6161.  rts
  6162.  
  6163. .chan5:
  6164.  move.b d5,RIGHTPLAYEDTAB+3
  6165.  move.b d3,RIGHTPLAYEDTAB+1+3
  6166.  move.b d4,RIGHTPLAYEDTAB+2+3
  6167.  move.b d3,vol1right
  6168.  move.l a1,pos1RIGHT
  6169.  move.l a2,Samp1endRIGHT
  6170.  rts
  6171.  
  6172. .chan6: 
  6173.  move.b d5,RIGHTPLAYEDTAB+6
  6174.  move.b d3,RIGHTPLAYEDTAB+1+6
  6175.  move.b d4,RIGHTPLAYEDTAB+2+6
  6176.  move.l a1,pos2RIGHT
  6177.  move.l a2,Samp2endRIGHT
  6178.  move.b d3,vol2right
  6179.  rts
  6180.  
  6181. SampleList:
  6182.  dc.l Scream,EndScream
  6183.  dc.l Shoot,EndShoot
  6184.  dc.l Munch,EndMunch
  6185.  dc.l PooGun,EndPooGun
  6186.  dc.l Collect,EndCollect
  6187. ;5
  6188.  dc.l DoorNoise,EndDoorNoise
  6189.  dc.l 0,0
  6190.  dc.l Stomp,EndStomp
  6191.  dc.l LowScream,EndLowScream
  6192.  dc.l BaddieGun,EndBaddieGun
  6193. ;10
  6194.  dc.l SwitchNoise,EndSwitch
  6195.  dc.l Reload,EndReload
  6196.  dc.l NoAmmo,EndNoAmmo
  6197.  dc.l Splotch,EndSplotch
  6198.  dc.l SplatPop,EndSplatPop
  6199. ;15
  6200.  dc.l Boom,EndBoom
  6201.  dc.l Hiss,EndHiss
  6202.  dc.l Howl1,EndHowl1
  6203.  dc.l Howl2,EndHowl2
  6204.  dc.l Pant,EndPant
  6205. ;20
  6206.  dc.l Whoosh,EndWhoosh
  6207.  
  6208. saveinters:  
  6209.  dc.w 0
  6210.  
  6211. z: dc.w 10
  6212.  
  6213. notifplaying:
  6214.  dc.w 0
  6215.  
  6216. audpos1: dc.w 0
  6217. audpos1b: dc.w 0
  6218. audpos2: dc.w 0
  6219. audpos2b: dc.w 0
  6220. audpos3: dc.w 0
  6221. audpos3b: dc.w 0
  6222. audpos4: dc.w 0
  6223. audpos4b: dc.w 0
  6224.  
  6225. vol0left: dc.w 0
  6226. vol0right: dc.w 0
  6227. vol1left: dc.w 0
  6228. vol1right: dc.w 0
  6229. vol2left: dc.w 0
  6230. vol2right: dc.w 0
  6231. vol3left: dc.w 0
  6232. vol3right: dc.w 0
  6233.  
  6234. pos: dc.l 0
  6235.  
  6236. pos0LEFT: dc.l empty
  6237. pos1LEFT: dc.l empty
  6238. pos2LEFT: dc.l empty
  6239. pos3LEFT: dc.l empty
  6240. pos0RIGHT: dc.l empty
  6241. pos1RIGHT: dc.l empty
  6242. pos2RIGHT: dc.l empty
  6243. pos3RIGHT: dc.l empty
  6244.  
  6245. numtodo dc.w 0
  6246.  
  6247. npt: dc.w 0
  6248.  
  6249. pretab:
  6250. val SET 0
  6251.  REPT 128
  6252.  dc.b val
  6253. val SET val+1
  6254.  ENDR
  6255. val SET -128
  6256.  REPT 128
  6257.  dc.b val
  6258. val SET val+1
  6259.  ENDR 
  6260.  
  6261. tab:
  6262.  ds.b 256*65
  6263.  
  6264.  
  6265. test: dc.l 0
  6266.  ds.l 30
  6267.  
  6268.  even
  6269. ConstCols:
  6270.  incbin "ConstCols"
  6271.  even
  6272. Smoothscalecols:
  6273. ; incbin "smoothbumppalscaled"
  6274.  even
  6275. SmoothTile:
  6276. ; incbin "smoothbumptile"
  6277.  even
  6278. Bumpscalecols:
  6279. ; incbin "Bumppalscaled"
  6280.  even
  6281. Bumptile:
  6282. ; incbin "bumptile"
  6283.  even
  6284. scalecols: incbin "bytepixpalscaled"
  6285.  even
  6286. floorscalecols: incbin "floorpalscaled"
  6287.  even
  6288. PaletteAddr: dc.l 0
  6289. ChunkAddr: dc.l 0
  6290. walltiles:
  6291.  dc.l GreenMechanicWALL
  6292.  dc.l BlueGreyMetalWALL
  6293.  dc.l TechnoDetailWALL
  6294.  dc.l BlueStoneWALL
  6295.  dc.l RedAlertWALL
  6296.  dc.l RockWALL
  6297.  
  6298. GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  6299. BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  6300. TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  6301. BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  6302. RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  6303. RockWALL: incbin "ab3:includes/walls/rock.wad"
  6304.  
  6305. floortile:
  6306.  incbin "floortile" 
  6307.  even
  6308. wallrouts:
  6309. ; incbin "2x2WallDraw" 
  6310.  CNOP 0,64
  6311. BackPicture:
  6312.  incbin "backfile"
  6313. EndBackPicture:
  6314.  
  6315. drawpt: dc.l colbars2
  6316. olddrawpt: dc.l colbars
  6317. frompt: dc.l 0 
  6318.  
  6319. SineTable:
  6320.  incbin "bigsine"
  6321.  
  6322. angpos: dc.w 0
  6323. angspd: dc.w 0
  6324. flooryoff: dc.w 0
  6325. xoff: dc.l 0
  6326. yoff: dc.l 0
  6327. yvel: dc.l 0
  6328. zoff: dc.l 0
  6329. tyoff: dc.l 0
  6330. xspdval: dc.l 0
  6331. zspdval: dc.l 0
  6332. Zone: dc.w 0
  6333.  
  6334. PLR1: dc.b $ff
  6335.  even
  6336. PLR1_cosval: dc.w 0
  6337. PLR1_sinval: dc.w 0
  6338. PLR1_angpos: dc.w 0
  6339. PLR1_angspd: dc.w 0
  6340. PLR1_xoff: dc.l 0
  6341. PLR1_yoff: dc.l 0
  6342. PLR1_yvel: dc.l 0
  6343. PLR1_zoff: dc.l 0
  6344. PLR1_tyoff: dc.l 0
  6345. PLR1_xspdval: dc.l 0
  6346. PLR1_zspdval: dc.l 0
  6347. PLR1_Zone: dc.w 0
  6348. PLR1_Roompt: dc.l 0
  6349. PLR1_OldRoompt: dc.l 0
  6350. PLR1_PointsToRotatePtr: dc.l 0
  6351. PLR1_ListOfGraphRooms: dc.l 0
  6352. PLR1_oldxoff: dc.l 0
  6353. PLR1_oldzoff: dc.l 0
  6354. PLR1_StoodInTop: dc.b 0
  6355.  even
  6356. PLR1_height: dc.l 0
  6357.  
  6358.  ds.w 4
  6359.  
  6360. PLR1s_cosval: dc.w 0
  6361. PLR1s_sinval: dc.w 0
  6362. PLR1s_angpos: dc.w 0
  6363. PLR1s_angspd: dc.w 0
  6364. PLR1s_xoff: dc.l 0
  6365. PLR1s_yoff: dc.l 0
  6366. PLR1s_yvel: dc.l 0
  6367. PLR1s_zoff: dc.l 0
  6368. PLR1s_tyoff: dc.l 0
  6369. PLR1s_xspdval: dc.l 0
  6370. PLR1s_zspdval: dc.l 0
  6371. PLR1s_Zone: dc.w 0
  6372. PLR1s_Roompt: dc.l 0
  6373. PLR1s_OldRoompt: dc.l 0
  6374. PLR1s_PointsToRotatePtr: dc.l 0
  6375. PLR1s_ListOfGraphRooms: dc.l 0
  6376. PLR1s_oldxoff: dc.l 0
  6377. PLR1s_oldzoff: dc.l 0
  6378. PLR1s_height: dc.l 0
  6379. PLR1s_targheight: dc.l 0
  6380.  
  6381.  ds.w 4
  6382.  
  6383. PLR2: dc.b $0
  6384.  even
  6385. PLR2_cosval: dc.w 0
  6386. PLR2_sinval: dc.w 0
  6387. PLR2_angpos: dc.w 0
  6388. PLR2_angspd: dc.w 0
  6389. PLR2_xoff: dc.l 0
  6390. PLR2_yoff: dc.l 0
  6391. PLR2_yvel: dc.l 0
  6392. PLR2_zoff: dc.l 0
  6393. PLR2_tyoff: dc.l 0
  6394. PLR2_xspdval: dc.l 0
  6395. PLR2_zspdval: dc.l 0
  6396. PLR2_Zone: dc.w 0
  6397. PLR2_Roompt: dc.l 0
  6398. PLR2_OldRoompt: dc.l 0
  6399. PLR2_PointsToRotatePtr: dc.l 0
  6400. PLR2_ListOfGraphRooms: dc.l 0
  6401. PLR2_ForwardSpd: dc.w 0
  6402.  
  6403. liftanimtab:
  6404.  
  6405. endliftanimtab:
  6406.  
  6407. glassball:
  6408.  incbin "glassball.inc"
  6409. endglass
  6410. glassballpt: dc.l glassball
  6411.  
  6412. rndtab: ; incbin "randfile"
  6413. endrnd: 
  6414.  
  6415. brightanimtab:
  6416.  dcb.w 200,20
  6417.  dc.w 5
  6418.  dc.w 10,20
  6419.  dc.w 5
  6420.  dcb.w 30,20
  6421.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  6422.  dcb.w 40,0
  6423.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  6424.  dcb.w 300,0
  6425.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  6426.  dc.w -1
  6427.  
  6428. Roompt: dc.l 0
  6429. OldRoompt: dc.l 0
  6430.  
  6431. *****************************************************************
  6432.  *
  6433.  include "AB3:source/LevelData2"
  6434.  *
  6435. *****************************************************************
  6436.  
  6437.  
  6438. wallpt: dc.l 0
  6439. floorpt: dc.l 0
  6440.  
  6441. Rotated:
  6442.  ds.l 800 
  6443. ObjRotated:
  6444.  ds.l 800
  6445.  
  6446. OnScreen:
  6447.  ds.l 800 
  6448.  
  6449. startwait: dc.w 0
  6450. endwait: dc.w 0
  6451.  
  6452. Faces: incbin "faces2raw"
  6453.  
  6454. *******************************************************************
  6455.  
  6456. consttab:
  6457.  incbin "constantfile"
  6458.  
  6459. *******************************************************************
  6460.  
  6461. darkentab: incbin "darkenedcols"
  6462. brightentab: incbin "brightenfile"
  6463. WorkSpace:
  6464.  ds.l 8192 
  6465. waterfile: incbin "waterfile"
  6466.  
  6467.  SECTION ffff,CODE_C
  6468.  
  6469. nullspr: dc.l 0
  6470.  
  6471.  cnop 0,8
  6472. borders:
  6473.  incbin "leftbord"
  6474.  incbin "rightbord"
  6475.  
  6476. health: incbin "healthstrip"
  6477. Ammunition: incbin "ammostrip"
  6478. healthpal: incbin "healthpal"
  6479. PanelKeys: incbin "greenkey"
  6480.  incbin "redkey"
  6481.  incbin "yellowkey"
  6482.  incbin "bluekey"
  6483.  
  6484. null: ds.w 500
  6485. null2: ds.w 500
  6486. null3: ds.w 500
  6487. null4: ds.w 500
  6488.  
  6489.  
  6490. Blurbfield:
  6491.  
  6492.  dc.w bpl1ptl
  6493. bl1l: dc.w 0
  6494.  dc.w bpl1pth
  6495. bl1h: dc.w 0
  6496.  
  6497.  dc.w diwstart,$2c81
  6498.  dc.w diwstop,$1cc1
  6499.  dc.w ddfstart,$38
  6500.  dc.w ddfstop,$b8
  6501.  dc.w bplcon0,$9201
  6502.  dc.w bplcon1,0
  6503.  dc.w $106,$c40
  6504. blcols:
  6505.  dc.w col0,0
  6506.  dc.w col1,$fff
  6507.  
  6508.  dc.w $108,0
  6509.  dc.w $10a,0
  6510.  
  6511.  dc.w $ffff,$fffe
  6512.  dc.w $ffff,$fffe
  6513.  
  6514. nullline:
  6515.  ds.b 80
  6516.  
  6517. bigfield:    
  6518.                 ; Start of our copper list.
  6519.  
  6520.  dc.w dmacon,$8020
  6521.  dc.w intreq,$8011
  6522.  dc.w $1fc,$f
  6523.  dc.w diwstart
  6524. winstart: dc.w $2cb1
  6525.  dc.w diwstop
  6526. winstop: dc.w $2c91
  6527.  dc.w ddfstart
  6528. fetchstart: dc.w $48
  6529.  dc.w ddfstop
  6530. fetchstop: dc.w $88
  6531.  
  6532. bordercols:
  6533.  incbin "borderpal"
  6534.  
  6535.  dc.w spr0ptl
  6536. s0l:
  6537.  dc.w 0
  6538.  dc.w spr0pth
  6539. s0h:
  6540.  dc.w 0
  6541.  dc.w spr1ptl
  6542. s1l:
  6543.  dc.w 0
  6544.  dc.w spr1pth
  6545. s1h:
  6546.  dc.w 0
  6547.  dc.w spr2ptl
  6548. s2l:
  6549.  dc.w 0
  6550.  dc.w spr2pth
  6551. s2h:
  6552.  dc.w 0
  6553.  dc.w spr3ptl
  6554. s3l:
  6555.  dc.w 0
  6556.  dc.w spr3pth
  6557. s3h:
  6558.  dc.w 0
  6559.  dc.w spr4ptl
  6560. s4l:
  6561.  dc.w 0
  6562.  dc.w spr4pth
  6563. s4h:
  6564.  dc.w 0
  6565.  dc.w spr5ptl
  6566. s5l:
  6567.  dc.w 0
  6568.  dc.w spr5pth
  6569. s5h:
  6570.  dc.w 0
  6571.  dc.w spr6ptl
  6572. s6l:
  6573.  dc.w 0
  6574.  dc.w spr6pth
  6575. s6h:
  6576.  dc.w 0
  6577.  dc.w spr7ptl
  6578. s7l:
  6579.  dc.w 0
  6580.  dc.w spr7pth
  6581. s7h:
  6582.  dc.w 0
  6583.  
  6584.  
  6585.  dc.w $106,$c42
  6586.  incbin "borderpal"
  6587.  
  6588.  dc.w $106,$8c42
  6589.  dc.w col0
  6590. hitcol: dc.w $0
  6591.  dc.w $106,$c42
  6592.  dc.w col0
  6593. hitcol2: dc.w 0
  6594.  
  6595.  dc.w bplcon0,$7201
  6596.  dc.w bplcon1
  6597. smoff:
  6598.  dc.w $0
  6599.  
  6600.  dc.w $108
  6601. modulo: dc.w -24
  6602.  dc.w $10a,-24
  6603.  
  6604.  dc.w bpl1pth
  6605. pl1h
  6606.  dc.w 0
  6607.  
  6608.  dc.w bpl1ptl
  6609. pl1l
  6610.  dc.w 0
  6611.  
  6612.  dc.w bpl2pth
  6613. pl2h
  6614.  dc.w 0
  6615.  
  6616.  dc.w bpl2ptl
  6617. pl2l
  6618.  dc.w 0
  6619.  
  6620.  dc.w bpl3pth
  6621. pl3h
  6622.  dc.w 0
  6623.  
  6624.  dc.w bpl3ptl
  6625. pl3l
  6626.  dc.w 0
  6627.  
  6628.  dc.w bpl4pth
  6629. pl4h
  6630.  dc.w 0
  6631.  
  6632.  dc.w bpl4ptl
  6633. pl4l
  6634.  dc.w 0
  6635.  
  6636.  dc.w bpl5pth
  6637. pl5h
  6638.  dc.w 0
  6639.  
  6640.  dc.w bpl5ptl
  6641. pl5l
  6642.  dc.w 0
  6643.  
  6644.  dc.w bpl6pth
  6645. pl6h
  6646.  dc.w 0
  6647.  
  6648.  dc.w bpl6ptl
  6649. pl6l
  6650.  dc.w 0
  6651.  
  6652.  dc.w bpl7pth
  6653. pl7h
  6654.  dc.w 0
  6655.  
  6656.  dc.w bpl7ptl
  6657. pl7l
  6658.  dc.w 0
  6659.  
  6660.  
  6661.  dc.w $1001,$ff00
  6662.  dc.w intreq,$11
  6663. yposcop:
  6664.  dc.w $2a11,$fffe
  6665.  dc.w $8a,0
  6666.  
  6667.  ds.l 104*12
  6668.  
  6669. colbars:
  6670. val SET $2a
  6671.  dcb.l 104*80,$1fe0000
  6672.  dc.w $106,$c42
  6673.  
  6674.  dc.w $80
  6675. pch1:
  6676.  dc.w 0
  6677.  dc.w $82
  6678. pcl1:
  6679.  dc.w 0 
  6680.  dc.w $88,0
  6681.  
  6682.  dc.w $ffff,$fffe       ; End copper list.
  6683.  
  6684.  ds.l 104*12
  6685.  
  6686. colbars2:
  6687. val SET $2a
  6688.  dcb.l 104*80,$1fe0000
  6689.  
  6690.  dc.w $106,$c42
  6691.  
  6692.  dc.w $80
  6693. pch2:
  6694.  dc.w 0
  6695.  dc.w $82
  6696. pcl2:
  6697.  dc.w 0
  6698.  
  6699.  dc.w $88,0
  6700.  
  6701.  dc.w $ffff,$fffe       ; End copper list.
  6702.  
  6703.  ds.l 104*10
  6704.  
  6705. old: dc.l 0
  6706.  
  6707. prot5: dc.w 0
  6708. PanelCop:
  6709.  
  6710.  dc.w $10c,0
  6711.  dc.w bplcon0,$1201
  6712.  dc.w bpl1ptl
  6713. n1l:
  6714.  dc.w 0
  6715.  dc.w bpl1pth
  6716. n1h:
  6717.  dc.w 0
  6718.  dc.w $108,-24
  6719.  incbin "Panelpal"
  6720.  
  6721.  dc.w bpl2pth
  6722. p2h
  6723.  dc.w 0
  6724.  
  6725.  dc.w bpl2ptl
  6726. p2l
  6727.  dc.w 0
  6728.  
  6729.  dc.w bpl3pth
  6730. p3h
  6731.  dc.w 0
  6732.  
  6733.  dc.w bpl3ptl
  6734. p3l
  6735.  dc.w 0
  6736.  
  6737.  dc.w bpl4pth
  6738. p4h
  6739.  dc.w 0
  6740.  dc.w bpl4ptl
  6741. p4l
  6742.  dc.w 0
  6743.  dc.w bpl5pth
  6744. p5h
  6745.  dc.w 0
  6746.  dc.w bpl5ptl
  6747. p5l
  6748.  dc.w 0
  6749.  dc.w bpl6pth
  6750. p6h
  6751.  dc.w 0
  6752.  dc.w bpl6ptl
  6753. p6l
  6754.  dc.w 0
  6755.  dc.w bpl7pth
  6756. p7h
  6757.  dc.w 0
  6758.  dc.w bpl7ptl
  6759. p7l
  6760.  dc.w 0
  6761.  dc.w bpl8pth
  6762. p8h
  6763.  dc.w 0
  6764.  dc.w bpl8ptl
  6765. p8l
  6766.  dc.w 0
  6767.  
  6768.  dc.w $80
  6769. och:
  6770.  dc.w 0
  6771.  dc.w $82
  6772. ocl:
  6773.  dc.w 0
  6774.  
  6775.  dc.w ddfstart,$38
  6776.  dc.w ddfstop,$b8
  6777.  dc.w diwstart,$2c81
  6778.  dc.w diwstop,$2cc1
  6779.  
  6780.  dc.w bplcon0
  6781. Panelcon: dc.w $0211
  6782.  dc.w bpl1pth
  6783. p1h
  6784.  dc.w 0
  6785.  
  6786.  dc.w bpl1ptl
  6787. p1l
  6788.  dc.w 0
  6789.  
  6790.  
  6791.  dc.w $108,40*7
  6792.  dc.w $10a,40*7
  6793.  
  6794.  dc.w $ffff,$fffe
  6795.  
  6796.  dc.w $180,$fff
  6797.  
  6798.  
  6799.  dc.w $f801,$ff00
  6800.  dc.w col1,$50
  6801.  dc.w $f901,$ff00
  6802.  dc.w col1,$90
  6803.  dc.w $fa01,$ff00
  6804.  dc.w col1,$f0
  6805.  dc.w $fb01,$ff00
  6806.  dc.w col1,$f0
  6807.  dc.w $fc01,$ff00
  6808.  dc.w col1,$90
  6809.  dc.w $fd01,$ff00
  6810.  dc.w col1,$50
  6811.  
  6812.  dc.w $fe01,$ff00
  6813.  dc.w col1,$fff
  6814.  
  6815.  dc.w $ffdf,$fffe
  6816.  dc.w $a01,$ff00
  6817.  dc.w bplcon0,$201
  6818.  
  6819.  incbin "faces2cols"
  6820.  dc.w bpl1pth
  6821. f1h
  6822.  dc.w 0
  6823.  
  6824.  dc.w bpl1ptl
  6825. f1l
  6826.  dc.w 0
  6827.  
  6828.  dc.w bpl2pth
  6829. f2h
  6830.  dc.w 0
  6831.  
  6832.  dc.w bpl2ptl
  6833. f2l
  6834.  dc.w 0
  6835.  
  6836.  dc.w bpl3pth
  6837. f3h
  6838.  dc.w 0
  6839.  
  6840.  dc.w bpl3ptl
  6841. f3l
  6842.  dc.w 0
  6843.  
  6844.  dc.w bpl4pth
  6845. f4h
  6846.  dc.w 0
  6847.  dc.w bpl4ptl
  6848. f4l
  6849.  dc.w 0
  6850.  
  6851.  dc.w bpl5pth
  6852. f5h
  6853.  dc.w 0
  6854.  dc.w bpl5ptl
  6855. f5l
  6856.  dc.w 0
  6857.  
  6858.  dc.w $0c01,$ff00
  6859.  dc.w bplcon0,$5201
  6860.   
  6861.  dc.w $ffff,$fffe
  6862.  
  6863.  cnop 0,64
  6864. FacePlace:
  6865.  ds.l 6*32*5
  6866.  
  6867.  
  6868.  
  6869. ********************************************
  6870. * Stuff you don't have to worry about yet. *
  6871. ********************************************
  6872.  
  6873. closeeverything:
  6874.  
  6875.  jsr mt_end
  6876.  
  6877.  move.l #$dff000,a6
  6878.  move.l old,$dff080     ; Restore old copper list.
  6879.  move.l old,d0
  6880.  move.w d0,ocl
  6881.  swap d0
  6882.  move.w d0,och
  6883.  move.w #$8020,dmacon(a6)
  6884.  move.w #$f,dmacon(a6)
  6885.  move.l saveit,$6c.w
  6886.  move.l OLDKINT,$68.w
  6887.  move.w saveinters,d0
  6888.  or.w #$c000,d0
  6889.  move.w d0,intena(a6)
  6890.  clr.w $dff0a8
  6891.  clr.w $dff0b8
  6892.  clr.w $dff0c8
  6893.  clr.w $dff0d8
  6894.  
  6895. ; move.w #3,d0
  6896. ;nonewvbl
  6897. ; btst #5,intreqrl(a6)
  6898. ; beq.s nonewvbl
  6899. ; move.w #$20,intreq(a6)
  6900. ; dbra d0,nonewvbl
  6901.  
  6902. ; move.l oldview,a1
  6903. ; move.l a1,d0
  6904. ; move.l gfxbase,a6
  6905. ; jsr -$de(a6)
  6906.  
  6907.  
  6908. ; cmp.b #'t',option+1
  6909. ; bra.s leaveold
  6910.  move.w #$f8e,$dff1dc
  6911. ;leaveold:
  6912.  
  6913.  rte
  6914.  
  6915. intbase: dc.l 0
  6916. gfxbase: dc.l 0
  6917. oldview: dc.l 0
  6918.  
  6919. stuff:
  6920.  
  6921.     Lea    gfxname(pc),a1    
  6922.     Moveq.l    #0,d0
  6923.     Move.l    $4.w,a6    
  6924.     Jsr    -$228(a6)
  6925.     Move.l     d0,gfxbase
  6926.     Move.l    d0,a6                Use As Base Reg
  6927.     Move.l    34(a6),oldview
  6928.     move.l 38(a6),old
  6929.  
  6930.  jmp endstuff
  6931.  
  6932. gfxname dc.b "graphics.library",0
  6933.  even
  6934. INTUNAME    dc.b    "intuition.library",0
  6935.  
  6936.  even
  6937.  
  6938.  
  6939.  cnop 0,64
  6940.  
  6941. Panel:
  6942.  incbin "PanelRaw"
  6943.  
  6944. TimerScr: ds.b 40*64
  6945.  
  6946. scrntab:
  6947.  ds.b 16
  6948. val SET 32
  6949.  REPT 96
  6950.  dc.b val,val,val
  6951. val SET val+1
  6952.  ENDR
  6953.  ds.b 16
  6954.  
  6955.  cnop 0,64
  6956. scrn:
  6957.  
  6958.  dcb.l 8,$33333333
  6959.  dc.l 0
  6960.  dc.l 0
  6961.  
  6962.  dcb.l 8,$0f0f0f0f
  6963.  dc.l 0
  6964.  dc.l 0
  6965.  
  6966.  dcb.l 8,$00ff00ff
  6967.  dc.l 0
  6968.  dc.l 0
  6969.  
  6970.  dcb.l 8,$0000ffff
  6971.  dc.l 0
  6972.  dc.l 0
  6973.  
  6974.  dc.l 0,-1,0,-1,0,-1,0,-1
  6975.  dc.l 0
  6976.  dc.l 0
  6977.  
  6978.  dc.l -1,-1,0,0,-1,-1,0,0
  6979.  dc.l 0
  6980.  dc.l 0
  6981.  
  6982.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  6983.  dc.l 0
  6984.  dc.l 0
  6985.  
  6986. NumTimes: dc.l 0
  6987. TimeCount: dc.l 0
  6988. oldtime: dc.l 0
  6989. counting: dc.b 0
  6990. oktodisplay: dc.b 0
  6991.  
  6992. INITTIMER:
  6993.  move.l #0,TimeCount
  6994.  move.l #0,NumTimes
  6995.  rts
  6996.  
  6997. STARTCOUNT:
  6998.  move.l d0,-(a7)
  6999.  move.l $dff004,d0
  7000.  and.l #$1ffff,d0
  7001.  move.l d0,oldtime
  7002.  st counting
  7003.  move.l (a7)+,d0
  7004.  rts
  7005.  
  7006. STOPCOUNT:
  7007.  move.l d0,-(a7)
  7008.  move.l $dff004,d0
  7009.  and.l #$1ffff,d0
  7010.  
  7011.  sub.l oldtime,d0
  7012.  cmp.l #-256,d0
  7013.  bge.s okcount
  7014.  add.l #313*256,d0
  7015. okcount:
  7016.  add.l d0,TimeCount
  7017.  addq.l #1,NumTimes
  7018.  clr.b counting
  7019.  move.l (a7)+,d0
  7020.  rts
  7021.  
  7022. STOPCOUNTNOADD:
  7023.  move.l d0,-(a7)
  7024.  move.l $dff004,d0
  7025.  and.l #$1ffff,d0
  7026.  
  7027.  sub.l oldtime,d0
  7028.  cmp.l #-256,d0
  7029.  bge.s okcount2
  7030.  add.l #313*256,d0
  7031. okcount2:
  7032.  add.l d0,TimeCount
  7033.  clr.b counting
  7034.  move.l (a7)+,d0
  7035.  rts
  7036.  
  7037. maxbot: dc.w 0
  7038. tstneg: dc.l 0
  7039.  
  7040. STOPTIMER:
  7041.  st oktodisplay
  7042.  rts
  7043.  
  7044. digits: incbin "numbers.inc"
  7045.  
  7046.  
  7047.  Section Sounds,CODE
  7048.  
  7049. Scream: incbin "ab3:sounds/Scream"
  7050.  ds.w 100
  7051. EndScream:
  7052. LowScream: incbin "ab3:sounds/LowScream"
  7053.  ds.w 100
  7054. EndLowScream:
  7055. BaddieGun: incbin "ab3:sounds/BaddieGun"
  7056. EndBaddieGun:
  7057. bass: incbin "ab3:sounds/backbass+drum"
  7058. bassend:
  7059. Shoot: incbin "ab3:sounds/fire!"
  7060. EndShoot:
  7061. Munch: incbin "ab3:sounds/munch"
  7062. EndMunch:
  7063. PooGun: incbin "ab3:sounds/shoot.dm"
  7064. EndPooGun:
  7065. Collect: incbin "ab3:sounds/collect"
  7066. EndCollect:
  7067. DoorNoise: incbin "ab3:sounds/newdoor"
  7068. EndDoorNoise:
  7069. Stomp: incbin "ab3:sounds/footstep3"
  7070. EndStomp:
  7071. SwitchNoise: incbin "ab3:sounds/switch"
  7072. EndSwitch:
  7073. Reload: incbin "ab3:sounds/switch1.SFX"
  7074. EndReload:
  7075. NoAmmo: incbin "ab3:sounds/noammo"
  7076. EndNoAmmo:
  7077. Splotch: incbin "ab3:sounds/splotch"
  7078. EndSplotch:
  7079. SplatPop: incbin "ab3:sounds/splatpop"
  7080. EndSplatPop:
  7081. Boom: incbin "ab3:sounds/boom"
  7082. EndBoom:
  7083. Hiss: incbin "ab3:sounds/newhiss"
  7084. EndHiss:
  7085. Howl1: incbin "ab3:sounds/howl1"
  7086. EndHowl1:
  7087. Howl2: incbin "ab3:sounds/howl2"
  7088. EndHowl2:
  7089. Pant: incbin "ab3:sounds/pant"
  7090. EndPant:
  7091. Whoosh: incbin "ab3:sounds/whoosh"
  7092. EndWhoosh:
  7093.  SECTION music,code_c
  7094.  
  7095. UseAllChannels: dc.w 0
  7096.  
  7097. mt_init:move.l    mt_data,a0
  7098.     move.l    a0,a1
  7099.     add.l    #$3b8,a1
  7100.     moveq    #$7f,d0
  7101.     moveq    #0,d1
  7102. mt_loop:move.l    d1,d2
  7103.     subq.w    #1,d0
  7104. mt_lop2:move.b    (a1)+,d1
  7105.     cmp.b    d2,d1
  7106.     bgt.s    mt_loop
  7107.     dbf    d0,mt_lop2
  7108.     addq.b    #1,d2
  7109.  
  7110.     lea    mt_samplestarts(pc),a1
  7111.     asl.l    #8,d2
  7112.     asl.l    #2,d2
  7113.     add.l    #$43c,d2
  7114.     add.l    a0,d2
  7115.     move.l    d2,a2
  7116.     moveq    #$1e,d0
  7117. mt_lop3:clr.l    (a2)
  7118.     move.l    a2,(a1)+
  7119.     moveq    #0,d1
  7120.     move.w    42(a0),d1
  7121.     asl.l    #1,d1
  7122.     add.l    d1,a2
  7123.     add.l    #$1e,a0
  7124.     dbf    d0,mt_lop3
  7125.  
  7126.     or.b    #$2,$bfe001
  7127.     move.b    #$6,mt_speed
  7128.     clr.w    $dff0a8
  7129.     clr.w    $dff0b8
  7130.     clr.w    $dff0c8
  7131.     clr.w    $dff0d8
  7132.     clr.b    mt_songpos
  7133.     clr.b    mt_counter
  7134.     clr.w    mt_pattpos
  7135.     rts
  7136.  
  7137. mt_end:    clr.w    $dff0a8
  7138.     clr.w    $dff0b8
  7139.     clr.w    $dff0c8
  7140.     clr.w    $dff0d8
  7141.     move.w    #$f,$dff096
  7142.     rts
  7143.  
  7144. mt_music:
  7145.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  7146.     move.l    mt_data,a0
  7147.     addq.b    #$1,mt_counter
  7148.     move.b    mt_counter,D0
  7149.     cmp.b    mt_speed,D0
  7150.     blt.s    mt_nonew
  7151.     clr.b    mt_counter
  7152.     bra    mt_getnew
  7153.  
  7154. mt_nonew:
  7155.     lea    mt_voice1(pc),a6
  7156.     lea    $dff0a0,a5
  7157.     bsr    mt_checkcom
  7158.     lea    mt_voice2(pc),a6
  7159.     lea    $dff0b0,a5
  7160.     bsr    mt_checkcom
  7161.     tst.b UseAllChannels
  7162.     beq mt_endr
  7163.      lea    mt_voice3(pc),a6
  7164.     lea    $dff0c0,a5
  7165.     bsr    mt_checkcom
  7166.     lea    mt_voice4(pc),a6
  7167.     lea    $dff0d0,a5
  7168.     bsr    mt_checkcom
  7169.     bra    mt_endr
  7170.  
  7171. mt_arpeggio:
  7172.     moveq    #0,d0
  7173.     move.b    mt_counter,d0
  7174.     divs    #$3,d0
  7175.     swap    d0
  7176.     cmp.w    #$0,d0
  7177.     beq.s    mt_arp2
  7178.     cmp.w    #$2,d0
  7179.     beq.s    mt_arp1
  7180.  
  7181.     moveq    #0,d0
  7182.     move.b    $3(a6),d0
  7183.     lsr.b    #4,d0
  7184.     bra.s    mt_arp3
  7185. mt_arp1:moveq    #0,d0
  7186.     move.b    $3(a6),d0
  7187.     and.b    #$f,d0
  7188.     bra.s    mt_arp3
  7189. mt_arp2:move.w    $10(a6),d2
  7190.     bra.s    mt_arp4
  7191. mt_arp3:asl.w    #1,d0
  7192.     moveq    #0,d1
  7193.     move.w    $10(a6),d1
  7194.     lea    mt_periods(pc),a0
  7195.     moveq    #$24,d7
  7196. mt_arploop:
  7197.     move.w    (a0,d0.w),d2
  7198.     cmp.w    (a0),d1
  7199.     bge.s    mt_arp4
  7200.     addq.l    #2,a0
  7201.     dbf    d7,mt_arploop
  7202.     rts
  7203. mt_arp4:move.w    d2,$6(a5)
  7204.     rts
  7205.  
  7206. mt_getnew:
  7207.     move.l    mt_data,a0
  7208.     move.l    a0,a3
  7209.     move.l    a0,a2
  7210.     add.l    #$c,a3
  7211.     add.l    #$3b8,a2
  7212.     add.l    #$43c,a0
  7213.  
  7214.     moveq    #0,d0
  7215.     move.l    d0,d1
  7216.     move.b    mt_songpos,d0
  7217.     move.b    (a2,d0.w),d1
  7218.     asl.l    #8,d1
  7219.     asl.l    #2,d1
  7220.     add.w    mt_pattpos,d1
  7221.     clr.w    mt_dmacon
  7222.  
  7223.     lea    $dff0a0,a5
  7224.     lea    mt_voice1(pc),a6
  7225.     bsr.s    mt_playvoice
  7226.     lea    $dff0b0,a5
  7227.     lea    mt_voice2(pc),a6
  7228.     bsr.s    mt_playvoice
  7229.     tst.b UseAllChannels
  7230.     beq mt_setdma
  7231.     lea    $dff0c0,a5
  7232.     lea    mt_voice3(pc),a6
  7233.     bsr.s    mt_playvoice
  7234.     lea    $dff0d0,a5
  7235.     lea    mt_voice4(pc),a6
  7236.     bsr.s    mt_playvoice
  7237.     bra    mt_setdma
  7238.  
  7239. mt_playvoice:
  7240.     move.l    (a0,d1.l),(a6)
  7241.     addq.l    #4,d1
  7242.     moveq    #0,d2
  7243.     move.b    $2(a6),d2
  7244.     and.b    #$f0,d2
  7245.     lsr.b    #4,d2
  7246.     move.b    (a6),d0
  7247.     and.b    #$f0,d0
  7248.     or.b    d0,d2
  7249.     tst.b    d2
  7250.     beq.s    mt_setregs
  7251.     moveq    #0,d3
  7252.     lea    mt_samplestarts(pc),a1
  7253.     move.l    d2,d4
  7254.     subq.l    #$1,d2
  7255.     asl.l    #2,d2
  7256.     mulu    #$1e,d4
  7257.     move.l    (a1,d2.l),$4(a6)
  7258.     move.w    (a3,d4.l),$8(a6)
  7259.     move.w    $2(a3,d4.l),$12(a6)
  7260.     move.w    $4(a3,d4.l),d3
  7261.     tst.w    d3
  7262.     beq.s    mt_noloop
  7263.     move.l    $4(a6),d2
  7264.     asl.w    #1,d3
  7265.     add.l    d3,d2
  7266.     move.l    d2,$a(a6)
  7267.     move.w    $4(a3,d4.l),d0
  7268.     add.w    $6(a3,d4.l),d0
  7269.     move.w    d0,8(a6)
  7270.     move.w    $6(a3,d4.l),$e(a6)
  7271.     move.w    $12(a6),d0
  7272.     asr.w #2,d0
  7273.     move.w d0,$8(a5)
  7274.     bra.s    mt_setregs
  7275. mt_noloop:
  7276.     move.l    $4(a6),d2
  7277.     add.l    d3,d2
  7278.     move.l    d2,$a(a6)
  7279.     move.w    $6(a3,d4.l),$e(a6)
  7280.     move.w    $12(a6),d0
  7281.     asr.w #2,d0
  7282.     move.w d0,$8(a5)
  7283. mt_setregs:
  7284.     move.w    (a6),d0
  7285.     and.w    #$fff,d0
  7286.     beq    mt_checkcom2
  7287.     move.b    $2(a6),d0
  7288.     and.b    #$F,d0
  7289.     cmp.b    #$3,d0
  7290.     bne.s    mt_setperiod
  7291.     bsr    mt_setmyport
  7292.     bra    mt_checkcom2
  7293. mt_setperiod:
  7294.     move.w    (a6),$10(a6)
  7295.     and.w    #$fff,$10(a6)
  7296.     move.w    $14(a6),d0
  7297.     move.w    d0,$dff096
  7298.     clr.b    $1b(a6)
  7299.  
  7300.     move.l    $4(a6),(a5)
  7301.     move.w    $8(a6),$4(a5)
  7302.     move.w    $10(a6),d0
  7303.     and.w    #$fff,d0
  7304.     move.w    d0,$6(a5)
  7305.     move.w    $14(a6),d0
  7306.     or.w    d0,mt_dmacon
  7307.     bra    mt_checkcom2
  7308.  
  7309. mt_setdma:
  7310.      move.w #250,d0
  7311. mt_wait:
  7312.      add.w #1,testchip
  7313.      dbra d0,mt_wait
  7314.     move.w    mt_dmacon,d0
  7315.     or.w    #$8000,d0
  7316.     and.w #%1111111111110011,d0
  7317.     move.w    d0,$dff096
  7318.     move.w #250,d0
  7319. mt_wait2:
  7320.     add.w #1,testchip
  7321.     dbra    d0,mt_wait2
  7322.     lea    $dff000,a5
  7323.     tst.b UseAllChannels
  7324.     beq.s noall
  7325.     lea    mt_voice4(pc),a6
  7326.     move.l    $a(a6),$d0(a5)
  7327.     move.w    $e(a6),$d4(a5)
  7328.     lea    mt_voice3(pc),a6
  7329.     move.l    $a(a6),$c0(a5)
  7330.     move.w    $e(a6),$c4(a5)
  7331. noall:
  7332.     lea    mt_voice2(pc),a6
  7333.     move.l    $a(a6),$b0(a5)
  7334.     move.w    $e(a6),$b4(a5)
  7335.     lea    mt_voice1(pc),a6
  7336.     move.l    $a(a6),$a0(a5)
  7337.     move.w    $e(a6),$a4(a5)
  7338.  
  7339.     add.w    #$10,mt_pattpos
  7340.     cmp.w    #$400,mt_pattpos
  7341.     bne.s    mt_endr
  7342. mt_nex:    clr.w    mt_pattpos
  7343.     clr.b    mt_break
  7344.     addq.b    #1,mt_songpos
  7345.     and.b    #$7f,mt_songpos
  7346.     move.b    mt_songpos,d1
  7347. ;    cmp.b    mt_data+$3b6,d1
  7348. ;    bne.s    mt_endr
  7349. ;    move.b    mt_data+$3b7,mt_songpos
  7350. mt_endr:tst.b    mt_break
  7351.     bne.s    mt_nex
  7352.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  7353.     rts
  7354.  
  7355. mt_setmyport:
  7356.     move.w    (a6),d2
  7357.     and.w    #$fff,d2
  7358.     move.w    d2,$18(a6)
  7359.     move.w    $10(a6),d0
  7360.     clr.b    $16(a6)
  7361.     cmp.w    d0,d2
  7362.     beq.s    mt_clrport
  7363.     bge.s    mt_rt
  7364.     move.b    #$1,$16(a6)
  7365.     rts
  7366. mt_clrport:
  7367.     clr.w    $18(a6)
  7368. mt_rt:    rts
  7369.  
  7370. CODESTORE: dc.l 0
  7371.  
  7372. mt_myport:
  7373.     move.b    $3(a6),d0
  7374.     beq.s    mt_myslide
  7375.     move.b    d0,$17(a6)
  7376.     clr.b    $3(a6)
  7377. mt_myslide:
  7378.     tst.w    $18(a6)
  7379.     beq.s    mt_rt
  7380.     moveq    #0,d0
  7381.     move.b    $17(a6),d0
  7382.     tst.b    $16(a6)
  7383.     bne.s    mt_mysub
  7384.     add.w    d0,$10(a6)
  7385.     move.w    $18(a6),d0
  7386.     cmp.w    $10(a6),d0
  7387.     bgt.s    mt_myok
  7388.     move.w    $18(a6),$10(a6)
  7389.     clr.w    $18(a6)
  7390. mt_myok:move.w    $10(a6),$6(a5)
  7391.     rts
  7392. mt_mysub:
  7393.     sub.w    d0,$10(a6)
  7394.     move.w    $18(a6),d0
  7395.     cmp.w    $10(a6),d0
  7396.     blt.s    mt_myok
  7397.     move.w    $18(a6),$10(a6)
  7398.     clr.w    $18(a6)
  7399.     move.w    $10(a6),$6(a5)
  7400.     rts
  7401.  
  7402. mt_vib:    move.b    $3(a6),d0
  7403.     beq.s    mt_vi
  7404.     move.b    d0,$1a(a6)
  7405.  
  7406. mt_vi:    move.b    $1b(a6),d0
  7407.     lea    mt_sin(pc),a4
  7408.     lsr.w    #$2,d0
  7409.     and.w    #$1f,d0
  7410.     moveq    #0,d2
  7411.     move.b    (a4,d0.w),d2
  7412.     move.b    $1a(a6),d0
  7413.     and.w    #$f,d0
  7414.     mulu    d0,d2
  7415.     lsr.w    #$6,d2
  7416.     move.w    $10(a6),d0
  7417.     tst.b    $1b(a6)
  7418.     bmi.s    mt_vibmin
  7419.     add.w    d2,d0
  7420.     bra.s    mt_vib2
  7421. mt_vibmin:
  7422.     sub.w    d2,d0
  7423. mt_vib2:move.w    d0,$6(a5)
  7424.     move.b    $1a(a6),d0
  7425.     lsr.w    #$2,d0
  7426.     and.w    #$3c,d0
  7427.     add.b    d0,$1b(a6)
  7428.     rts
  7429.  
  7430. mt_nop:    move.w    $10(a6),$6(a5)
  7431.     rts
  7432.  
  7433.  
  7434. mt_checkcom:
  7435.     move.w    $2(a6),d0
  7436.     and.w    #$fff,d0
  7437.     beq.s    mt_nop
  7438.     move.b    $2(a6),d0
  7439.     and.b    #$f,d0
  7440.     tst.b    d0
  7441.     beq    mt_arpeggio
  7442.     cmp.b    #$1,d0
  7443.     beq.s    mt_portup
  7444.     cmp.b    #$2,d0
  7445.     beq    mt_portdown
  7446.     cmp.b    #$3,d0
  7447.     beq    mt_myport
  7448.     cmp.b    #$4,d0
  7449.     beq    mt_vib
  7450.     move.w    $10(a6),$6(a5)
  7451.     cmp.b    #$a,d0
  7452.     beq.s    mt_volslide
  7453.     rts
  7454.  
  7455. mt_volslide:
  7456.     moveq    #0,d0
  7457.     move.b    $3(a6),d0
  7458.     lsr.b    #4,d0
  7459.     tst.b    d0
  7460.     beq.s    mt_voldown
  7461.     add.w    d0,$12(a6)
  7462.     cmp.w    #$40,$12(a6)
  7463.     bmi.s    mt_vol2
  7464.     move.w    #$40,$12(a6)
  7465. mt_vol2:move.w    $12(a6),d0
  7466.     asr.w #2,d0
  7467.     move.w d0,$8(a5)
  7468.     rts
  7469.  
  7470. mt_voldown:
  7471.     moveq    #0,d0
  7472.     move.b    $3(a6),d0
  7473.     and.b    #$f,d0
  7474.     sub.w    d0,$12(a6)
  7475.     bpl.s    mt_vol3
  7476.     clr.w    $12(a6)
  7477. mt_vol3:move.w    $12(a6),d0
  7478.     asr.w #2,d0
  7479.     move.w d0,$8(a5)
  7480.     rts
  7481.  
  7482. mt_portup:
  7483.     moveq    #0,d0
  7484.     move.b    $3(a6),d0
  7485.     sub.w    d0,$10(a6)
  7486.     move.w    $10(a6),d0
  7487.     and.w    #$fff,d0
  7488.     cmp.w    #$71,d0
  7489.     bpl.s    mt_por2
  7490.     and.w    #$f000,$10(a6)
  7491.     or.w    #$71,$10(a6)
  7492. mt_por2:move.w    $10(a6),d0
  7493.     and.w    #$fff,d0
  7494.     move.w    d0,$6(a5)
  7495.     rts
  7496.  
  7497. mt_portdown:
  7498.     clr.w    d0
  7499.     move.b    $3(a6),d0
  7500.     add.w    d0,$10(a6)
  7501.     move.w    $10(a6),d0
  7502.     and.w    #$fff,d0
  7503.     cmp.w    #$358,d0
  7504.     bmi.s    mt_por3
  7505.     and.w    #$f000,$10(a6)
  7506.     or.w    #$358,$10(a6)
  7507. mt_por3:move.w    $10(a6),d0
  7508.     and.w    #$fff,d0
  7509.     move.w    d0,$6(a5)
  7510.     rts
  7511.  
  7512. mt_checkcom2:
  7513.     move.b    $2(a6),d0
  7514.     and.b    #$f,d0
  7515.     cmp.b    #$e,d0
  7516.     beq.s    mt_setfilt
  7517.     cmp.b    #$d,d0
  7518.     beq.s    mt_pattbreak
  7519.     cmp.b    #$b,d0
  7520.     beq.s    mt_posjmp
  7521.     cmp.b    #$c,d0
  7522.     beq.s    mt_setvol
  7523.     cmp.b    #$f,d0
  7524.     beq.s    mt_setspeed
  7525.     rts
  7526.  
  7527. mt_setfilt:
  7528.     move.b    $3(a6),d0
  7529.     and.b    #$1,d0
  7530.     asl.b    #$1,d0
  7531.     and.b    #$fd,$bfe001
  7532.     or.b    d0,$bfe001
  7533.     rts
  7534. mt_pattbreak:
  7535.     not.b    mt_break
  7536.     rts
  7537. mt_posjmp:
  7538.     st reachedend
  7539.     move.b    $3(a6),d0
  7540.     subq.b    #$1,d0
  7541.     move.b    d0,mt_songpos
  7542.     not.b    mt_break
  7543.     rts
  7544. mt_setvol:
  7545.     cmp.b    #$40,$3(a6)
  7546.     ble.s    mt_vol4
  7547.     move.b    #$40,$3(a6)
  7548. mt_vol4:move.b    $3(a6),d0
  7549.     asr.w #2,d0
  7550.     move.w d0,$8(a5)
  7551.     rts
  7552. mt_setspeed:
  7553.     cmp.b    #$1f,$3(a6)
  7554.     ble.s    mt_sets
  7555.     move.b    #$1f,$3(a6)
  7556. mt_sets:move.b    $3(a6),d0
  7557.     beq.s    mt_rts2
  7558.     move.b    d0,mt_speed
  7559.     clr.b    mt_counter
  7560. mt_rts2:rts
  7561.  
  7562. mt_sin:
  7563.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  7564.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  7565.  
  7566. mt_periods:
  7567.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  7568.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  7569.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  7570.  DC.w $007f,$0078,$0071,$0000,$0000
  7571.  
  7572. reachedend: dc.b 0
  7573. mt_speed:    DC.b    6
  7574. mt_songpos:    DC.b    0
  7575. mt_pattpos:    DC.w    0
  7576. mt_counter:    DC.b    0
  7577.  
  7578. mt_break:    DC.b    0
  7579. mt_dmacon:    DC.w    0
  7580. mt_samplestarts:DS.L    $1f
  7581. mt_voice1:    DS.w    10
  7582.         DC.w    1
  7583.         DS.w    3
  7584. mt_voice2:    DS.w    10
  7585.         DC.w    2
  7586.         DS.w    3
  7587. mt_voice3:    DS.w    10
  7588.         DC.w    4
  7589.         DS.w    3
  7590. mt_voice4:    DS.w    10
  7591.         DC.w    8
  7592.         DS.w    3
  7593.  
  7594. testchip: dc.w 0
  7595.  
  7596. ;/* End of File */
  7597. mt_data: dc.l 0
  7598.  
  7599. ingame:
  7600. ; incbin "ab3:includes/ingame"
  7601. gameover: incbin "ab3:includes/gameover"
  7602. welldone: incbin "ab3:includes/welldone"
  7603.